sfx2: exception on storage commit is an error (related: tdf#91807)
For no good or obvious reason, SfxMedium::StorageCommit_Impl() swallows
embed::UseBackupException if there is a pTempFile, which (as the comment
claims) is "always now". This results in the temp file actually being
copied to the user-visible file and the SaveAs "succeeding", when it
clearly did not.
Also move the exception throwing to the end of ZipOutputStream::finish()
to avoid more memory leaks.
Change-Id: I448cc43291754ef20adfa6b65916282fcc365a11
diff --git a/package/source/zipapi/ZipOutputStream.cxx b/package/source/zipapi/ZipOutputStream.cxx
index 2daff01..41f78b4 100644
--- a/package/source/zipapi/ZipOutputStream.cxx
+++ b/package/source/zipapi/ZipOutputStream.cxx
@@ -183,11 +183,6 @@ void ZipOutputStream::finish()
// consume all processed entries
consumeAllScheduledThreadEntries();
if (m_aDeflateException.hasValue())
{ // throw once all threads are finished and m_aEntries can be released
::cppu::throwException(m_aDeflateException);
}
sal_Int32 nOffset= static_cast < sal_Int32 > (m_aChucker.GetPosition());
for (ZipEntry* p : m_aZipList)
{
@@ -197,6 +192,11 @@ void ZipOutputStream::finish()
writeEND( nOffset, static_cast < sal_Int32 > (m_aChucker.GetPosition()) - nOffset);
m_xStream->flush();
m_aZipList.clear();
if (m_aDeflateException.hasValue())
{ // throw once all threads are finished and m_aEntries can be released
::cppu::throwException(m_aDeflateException);
}
}
const css::uno::Reference< css::io::XOutputStream >& ZipOutputStream::getStream()
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index b64e8d3..c4ce871 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -1625,10 +1625,10 @@ bool SfxMedium::StorageCommit_Impl()
OSL_ENSURE( !pImpl->m_aName.isEmpty(), "The exception _must_ contain the temporary URL!\n" );
}
}
if ( !GetError() )
SetError( ERRCODE_IO_GENERAL, OSL_LOG_PREFIX );
}
if (!GetError())
SetError( ERRCODE_IO_GENERAL, OSL_LOG_PREFIX );
}
catch ( const uno::Exception& )
{