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& )
                {