diff options
-rw-r--r-- | sc/source/filter/xml/xmlwrap.cxx | 24 | ||||
-rw-r--r-- | sc/source/ui/unoobj/scdetect.cxx | 2 |
2 files changed, 23 insertions, 3 deletions
diff --git a/sc/source/filter/xml/xmlwrap.cxx b/sc/source/filter/xml/xmlwrap.cxx index dbf672993310..7bc5396fcb5b 100644 --- a/sc/source/filter/xml/xmlwrap.cxx +++ b/sc/source/filter/xml/xmlwrap.cxx @@ -265,7 +265,24 @@ sal_uInt32 ScXMLImportWrapper::ImportFromComponent(uno::Reference<lang::XMultiSe } catch( xml::sax::SAXParseException& r ) { - if( bEncrypted ) + // sax parser sends wrapped exceptions, + // try to find the original one + xml::sax::SAXException aSaxEx = *(xml::sax::SAXException*)(&r); + sal_Bool bTryChild = sal_True; + + while( bTryChild ) + { + xml::sax::SAXException aTmp; + if ( aSaxEx.WrappedException >>= aTmp ) + aSaxEx = aTmp; + else + bTryChild = sal_False; + } + + packages::zip::ZipIOException aBrokenPackage; + if ( aSaxEx.WrappedException >>= aBrokenPackage ) + return ERRCODE_IO_BROKENPACKAGE; + else if( bEncrypted ) nReturn = ERRCODE_SFX_WRONGPASSWORD; else { @@ -298,7 +315,10 @@ sal_uInt32 ScXMLImportWrapper::ImportFromComponent(uno::Reference<lang::XMultiSe } catch( xml::sax::SAXException& r ) { - if( bEncrypted ) + packages::zip::ZipIOException aBrokenPackage; + if ( r.WrappedException >>= aBrokenPackage ) + return ERRCODE_IO_BROKENPACKAGE; + else if( bEncrypted ) nReturn = ERRCODE_SFX_WRONGPASSWORD; else { diff --git a/sc/source/ui/unoobj/scdetect.cxx b/sc/source/ui/unoobj/scdetect.cxx index 1b17c2e130ac..6ed8181091ac 100644 --- a/sc/source/ui/unoobj/scdetect.cxx +++ b/sc/source/ui/unoobj/scdetect.cxx @@ -350,7 +350,7 @@ static BOOL lcl_IsAnyXMLFilter( const SfxFilter* pFilter ) // maybe that IsStorage() already created an error! if ( bIsStorage ) { - uno::Reference < embed::XStorage > xStorage(aMedium.GetStorage()); + uno::Reference < embed::XStorage > xStorage(aMedium.GetStorage( sal_False )); if ( aMedium.GetLastStorageCreationState() != ERRCODE_NONE ) { // error during storage creation means _here_ that the medium |