This is an automated email from the ASF dual-hosted git repository. damjan pushed a commit to branch AOO42X in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/AOO42X by this push: new 51be0a98fe Fix exception specification in a few places where they were missing, and causing AOO to crash when compiled with Clang. 51be0a98fe is described below commit 51be0a98fead28b15570c923f30b8423deec75ce Author: Damjan Jovanovic <dam...@apache.org> AuthorDate: Sun Jul 7 20:14:26 2024 +0200 Fix exception specification in a few places where they were missing, and causing AOO to crash when compiled with Clang. Also fix formatting of some writerfilter code. Partially fixes: https://bz.apache.org/ooo/show_bug.cgi?id=127252 Patch by: me (cherry picked from commit ab0bad1672c1433536a0fd2143f31efcc5754d80) --- main/oox/source/docprop/ooxmldocpropimport.cxx | 2 +- main/writerfilter/source/filter/ImportFilter.cxx | 74 ++++++++++++---------- main/writerfilter/source/ooxml/OOXMLStreamImpl.cxx | 5 +- main/writerfilter/source/ooxml/OOXMLStreamImpl.hxx | 13 ++-- 4 files changed, 55 insertions(+), 39 deletions(-) diff --git a/main/oox/source/docprop/ooxmldocpropimport.cxx b/main/oox/source/docprop/ooxmldocpropimport.cxx index b2814e48c9..ddc8fc1f6d 100644 --- a/main/oox/source/docprop/ooxmldocpropimport.cxx +++ b/main/oox/source/docprop/ooxmldocpropimport.cxx @@ -72,7 +72,7 @@ Reference< XInterface > SAL_CALL DocumentPropertiesImport_createInstance( const namespace { -Sequence< InputSource > lclGetRelatedStreams( const Reference< XStorage >& rxStorage, const OUString& rStreamType ) throw (RuntimeException) +Sequence< InputSource > lclGetRelatedStreams( const Reference< XStorage >& rxStorage, const OUString& rStreamType ) throw (RuntimeException, Exception) { Reference< XRelationshipAccess > xRelation( rxStorage, UNO_QUERY_THROW ); Reference< XHierarchicalStorageAccess > xHierarchy( rxStorage, UNO_QUERY_THROW ); diff --git a/main/writerfilter/source/filter/ImportFilter.cxx b/main/writerfilter/source/filter/ImportFilter.cxx index eb7c3a833a..0197f9e75a 100644 --- a/main/writerfilter/source/filter/ImportFilter.cxx +++ b/main/writerfilter/source/filter/ImportFilter.cxx @@ -97,44 +97,52 @@ sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDes dmapperLogger->startDocument(); #endif - writerfilter::dmapper::SourceDocumentType eType = - (m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007" ) ) || - m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007_Template" ) )) ? - writerfilter::dmapper::DOCUMENT_OOXML : writerfilter::dmapper::DOCUMENT_DOC; - writerfilter::Stream::Pointer_t pStream(new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, eType)); - //create the tokenizer and domain mapper - if( eType == writerfilter::dmapper::DOCUMENT_OOXML ) - { - writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream); - writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream)); - - uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW); - pDocument->setModel(xModel); - - uno::Reference<drawing::XDrawPageSupplier> xDrawings - (m_xDstDoc, uno::UNO_QUERY_THROW); - uno::Reference<drawing::XDrawPage> xDrawPage - (xDrawings->getDrawPage(), uno::UNO_SET_THROW); - pDocument->setDrawPage(xDrawPage); - - pDocument->resolve(*pStream); - } - else - { - writerfilter::doctok::WW8Stream::Pointer_t pDocStream = writerfilter::doctok::WW8DocumentFactory::createStream(m_xContext, xInputStream); - writerfilter::doctok::WW8Document::Pointer_t pDocument(writerfilter::doctok::WW8DocumentFactory::createDocument(pDocStream)); + writerfilter::dmapper::SourceDocumentType eType = + (m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007" ) ) || + m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007_Template" ) )) ? + writerfilter::dmapper::DOCUMENT_OOXML : writerfilter::dmapper::DOCUMENT_DOC; + writerfilter::Stream::Pointer_t pStream(new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, eType)); + //create the tokenizer and domain mapper + if( eType == writerfilter::dmapper::DOCUMENT_OOXML ) + { + writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream; + try + { + pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream); + } + catch (uno::Exception &e) + { + throw uno::RuntimeException(e.Message, uno::Reference< uno::XInterface >()); + } + writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream)); + + uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW); + pDocument->setModel(xModel); + + uno::Reference<drawing::XDrawPageSupplier> xDrawings + (m_xDstDoc, uno::UNO_QUERY_THROW); + uno::Reference<drawing::XDrawPage> xDrawPage + (xDrawings->getDrawPage(), uno::UNO_SET_THROW); + pDocument->setDrawPage(xDrawPage); + + pDocument->resolve(*pStream); + } + else + { + writerfilter::doctok::WW8Stream::Pointer_t pDocStream = writerfilter::doctok::WW8DocumentFactory::createStream(m_xContext, xInputStream); + writerfilter::doctok::WW8Document::Pointer_t pDocument(writerfilter::doctok::WW8DocumentFactory::createDocument(pDocStream)); - pDocument->resolve(*pStream); - } + pDocument->resolve(*pStream); + } #ifdef DEBUG_IMPORT - writerfilter::TagLogger::dump("DOMAINMAPPER"); - dmapperLogger->endDocument(); - writerfilter::TagLogger::dump("DEBUG"); - debugLogger->endDocument(); + writerfilter::TagLogger::dump("DOMAINMAPPER"); + dmapperLogger->endDocument(); + writerfilter::TagLogger::dump("DEBUG"); + debugLogger->endDocument(); #endif - return sal_True; + return sal_True; } return sal_False; } diff --git a/main/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/main/writerfilter/source/ooxml/OOXMLStreamImpl.cxx index a3d39cf61e..a73975b9c7 100644 --- a/main/writerfilter/source/ooxml/OOXMLStreamImpl.cxx +++ b/main/writerfilter/source/ooxml/OOXMLStreamImpl.cxx @@ -41,6 +41,7 @@ using namespace ::std; OOXMLStreamImpl::OOXMLStreamImpl (uno::Reference<uno::XComponentContext> xContext, uno::Reference<io::XInputStream> xStorageStream, StreamType_t nType) +throw (uno::Exception) : mxContext(xContext), mxStorageStream(xStorageStream), mnStreamType(nType) { mxStorage.set @@ -53,6 +54,7 @@ OOXMLStreamImpl::OOXMLStreamImpl OOXMLStreamImpl::OOXMLStreamImpl (OOXMLStreamImpl & rOOXMLStream, StreamType_t nStreamType) +throw (uno::Exception) : mxContext(rOOXMLStream.mxContext), mxStorageStream(rOOXMLStream.mxStorageStream), mxStorage(rOOXMLStream.mxStorage), @@ -66,6 +68,7 @@ OOXMLStreamImpl::OOXMLStreamImpl OOXMLStreamImpl::OOXMLStreamImpl (OOXMLStreamImpl & rOOXMLStream, const rtl::OUString & rId) +throw (uno::Exception) : mxContext(rOOXMLStream.mxContext), mxStorageStream(rOOXMLStream.mxStorageStream), mxStorage(rOOXMLStream.mxStorage), @@ -244,7 +247,7 @@ bool OOXMLStreamImpl::lcl_getTarget(uno::Reference<embed::XRelationshipAccess> return ::rtl::OUString(); } -void OOXMLStreamImpl::init() +void OOXMLStreamImpl::init() throw (uno::Exception) { bool bFound = lcl_getTarget(mxRelationshipAccess, mnStreamType, msId, msTarget); diff --git a/main/writerfilter/source/ooxml/OOXMLStreamImpl.hxx b/main/writerfilter/source/ooxml/OOXMLStreamImpl.hxx index 133b0b0920..b7335d49ed 100644 --- a/main/writerfilter/source/ooxml/OOXMLStreamImpl.hxx +++ b/main/writerfilter/source/ooxml/OOXMLStreamImpl.hxx @@ -36,7 +36,7 @@ using namespace com::sun::star; class OOXMLStreamImpl : public OOXMLStream { - void init(); + void init() throw (uno::Exception); uno::Reference<uno::XComponentContext> mxContext; uno::Reference<io::XInputStream> mxStorageStream; @@ -61,12 +61,17 @@ public: typedef boost::shared_ptr<OOXMLStreamImpl> Pointer_t; OOXMLStreamImpl - (OOXMLStreamImpl & rStream, StreamType_t nType); + (OOXMLStreamImpl & rStream, StreamType_t nType) + throw (uno::Exception); + OOXMLStreamImpl (uno::Reference<uno::XComponentContext> xContext, uno::Reference<io::XInputStream> xStorageStream, - StreamType_t nType); - OOXMLStreamImpl(OOXMLStreamImpl & rStream, const rtl::OUString & rId); + StreamType_t nType) + throw (uno::Exception); + + OOXMLStreamImpl(OOXMLStreamImpl & rStream, const rtl::OUString & rId) + throw (uno::Exception); virtual ~OOXMLStreamImpl();