From 5cc5a03d799434b51f67256a46d52b823870be94 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Fri, 16 Aug 2013 12:35:26 +0200 Subject: fdo#68084: OOXML import: handle exceptions if stream is missing The bugdoc does not have a styles.xml but a stylesWithEffects.xml, whatever that may mean. (the app.xml contains "Microsoft Macintosh Word") Change-Id: If3d11c5d166dcaf3d94129339559787c20e6db46 (cherry picked from commit 6e3ac01f850228afb5c6cb1a33b101693aea8712) Reviewed-on: https://gerrit.libreoffice.org/5450 Reviewed-by: Petr Mladek Tested-by: Petr Mladek --- package/source/xstor/xstorage.cxx | 6 +++++- writerfilter/source/ooxml/OOXMLDocumentImpl.cxx | 13 +++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/package/source/xstor/xstorage.cxx b/package/source/xstor/xstorage.cxx index bfd2302a47b7..a2e03500746d 100644 --- a/package/source/xstor/xstorage.cxx +++ b/package/source/xstor/xstorage.cxx @@ -2194,7 +2194,11 @@ SotElement_Impl* OStorage::OpenStreamElement_Impl( const ::rtl::OUString& aStrea if ( !( m_pImpl->m_nStorageMode & embed::ElementModes::WRITE ) || (( nOpenMode & embed::ElementModes::WRITE ) != embed::ElementModes::WRITE ) || ( nOpenMode & embed::ElementModes::NOCREATE ) == embed::ElementModes::NOCREATE ) - throw io::IOException( OSL_LOG_PREFIX, uno::Reference< uno::XInterface >() ); // TODO: access_denied + { + throw io::IOException("Element does not exist and cannot be " + "created: \"" + aStreamName + "\"", + uno::Reference< uno::XInterface >()); // TODO: access_denied + } // create a new StreamElement and insert it into the list pElement = m_pImpl->InsertStream( aStreamName, bEncr ); diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx index 29c64ade8028..58a10060a3f1 100644 --- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx +++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx @@ -54,8 +54,17 @@ OOXMLDocumentImpl::~OOXMLDocumentImpl() void OOXMLDocumentImpl::resolveFastSubStream(Stream & rStreamHandler, OOXMLStream::StreamType_t nType) { - OOXMLStream::Pointer_t pStream - (OOXMLDocumentFactory::createStream(mpStream, nType)); + OOXMLStream::Pointer_t pStream; + try + { + pStream = OOXMLDocumentFactory::createStream(mpStream, nType); + } + catch (uno::Exception const& e) + { + SAL_INFO("writerfilter", "resolveFastSubStream: exception while " + "resolving stream " << (unsigned)nType << " : " << e.Message); + return; + } OOXMLStream::Pointer_t savedStream = mpStream; mpStream = pStream; -- cgit v1.2.3