[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - package/inc package/source

Caolán McNamara caolanm at redhat.com
Fri Jun 5 04:06:50 PDT 2015


 package/inc/ZipOutputEntry.hxx                 |    4 ++++
 package/source/zipapi/ZipOutputStream.cxx      |    6 ++++++
 package/source/zippackage/ZipPackageStream.cxx |   12 ++++++++++--
 3 files changed, 20 insertions(+), 2 deletions(-)

New commits:
commit 56b5b8aac8729a37814f82b83ebba0d16f87e407
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Jun 5 11:45:36 2015 +0100

    uncaught exceptions in parallel deflate threads on re-export of HTB23106 odgs
    
    Change-Id: Ib6aef478b8dcf1c7a7262ab60eef4d44da0de632
    (cherry picked from commit 05661623c7e328c536814354bafd8294de0e9ee0)

diff --git a/package/inc/ZipOutputEntry.hxx b/package/inc/ZipOutputEntry.hxx
index 48e33eb..2a5aa04 100644
--- a/package/inc/ZipOutputEntry.hxx
+++ b/package/inc/ZipOutputEntry.hxx
@@ -42,6 +42,7 @@ class ZipOutputEntry
 
     ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XCipherContext > m_xCipherContext;
     ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XDigestContext > m_xDigestContext;
+    ::css::uno::Any m_aParallelDeflateException;
 
     CRC32               m_aCRC;
     ZipEntry            *m_pCurrentEntry;
@@ -62,6 +63,9 @@ public:
     ZipPackageStream* getZipPackageStream() { return m_pCurrentStream; }
     bool isEncrypt() { return m_bEncryptCurrentEntry; }
 
+    void setParallelDeflateException(const ::css::uno::Any &rAny) { m_aParallelDeflateException = rAny; }
+    ::css::uno::Any getParallelDeflateException() const { return m_aParallelDeflateException; }
+
     void closeEntry();
     void write(const css::uno::Sequence< sal_Int8 >& rBuffer);
 
diff --git a/package/source/zipapi/ZipOutputStream.cxx b/package/source/zipapi/ZipOutputStream.cxx
index 7c7924d..4acfa77 100644
--- a/package/source/zipapi/ZipOutputStream.cxx
+++ b/package/source/zipapi/ZipOutputStream.cxx
@@ -23,6 +23,7 @@
 #include <com/sun/star/io/XInputStream.hpp>
 #include <com/sun/star/io/XOutputStream.hpp>
 #include <comphelper/storagehelper.hxx>
+#include <cppuhelper/exc_hlp.hxx>
 #include <osl/diagnose.h>
 
 #include <osl/time.h>
@@ -101,6 +102,11 @@ void ZipOutputStream::finish()
     m_rSharedThreadPool.waitUntilEmpty();
     for (size_t i = 0; i < m_aEntries.size(); i++)
     {
+        //Any exceptions thrown in the threads were caught and stored for now
+        ::css::uno::Any aCaughtException(m_aEntries[i]->getParallelDeflateException());
+        if (aCaughtException.hasValue())
+            ::cppu::throwException(aCaughtException);
+
         writeLOC(m_aEntries[i]->getZipEntry(), m_aEntries[i]->isEncrypt());
 
         sal_Int32 nRead;
diff --git a/package/source/zippackage/ZipPackageStream.cxx b/package/source/zippackage/ZipPackageStream.cxx
index c94cba6..6260045 100644
--- a/package/source/zippackage/ZipPackageStream.cxx
+++ b/package/source/zippackage/ZipPackageStream.cxx
@@ -46,6 +46,7 @@
 #include <comphelper/processfactory.hxx>
 #include <comphelper/seekableinput.hxx>
 #include <comphelper/storagehelper.hxx>
+#include <cppuhelper/exc_hlp.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <cppuhelper/typeprovider.hxx>
 
@@ -471,8 +472,15 @@ public:
 private:
     virtual void doWork() SAL_OVERRIDE
     {
-        deflateZipEntry(mpEntry, mxInStream);
-        mxInStream.clear();
+        try
+        {
+            deflateZipEntry(mpEntry, mxInStream);
+            mxInStream.clear();
+        }
+        catch (const uno::Exception&)
+        {
+            mpEntry->setParallelDeflateException(::cppu::getCaughtException());
+        }
     }
 };
 


More information about the Libreoffice-commits mailing list