[Libreoffice-commits] core.git: embeddedobj/source

Caolán McNamara caolanm at redhat.com
Fri Sep 23 07:39:21 UTC 2016


 embeddedobj/source/msole/olecomponent.cxx |   17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

New commits:
commit 373b44a2fcbe78e8a3ff14cd410826af151a6adf
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Sep 22 21:11:56 2016 +0100

    Resolves: tdf#101971 OleLoad under structured exception guards
    
    sample pptx crashes down in the depths of (apparently pre-installed on
    32bit Windows 10) Flash.ocx
    
    Change-Id: I4e083d492e56e72df47b2c172d7f07f0e39b82ea
    Reviewed-on: https://gerrit.libreoffice.org/29199
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
    Tested-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/embeddedobj/source/msole/olecomponent.cxx b/embeddedobj/source/msole/olecomponent.cxx
index 6a7b9e4..2f59f35 100644
--- a/embeddedobj/source/msole/olecomponent.cxx
+++ b/embeddedobj/source/msole/olecomponent.cxx
@@ -715,6 +715,19 @@ sal_Bool OleComponent::InitializeObject_Impl()
     return sal_True;
 }
 
+namespace
+{
+    HRESULT OleLoadSeh(LPSTORAGE pIStorage, LPVOID* ppObj)
+    {
+        HRESULT hr = E_FAIL;
+        __try {
+            hr = OleLoad(pIStorage, IID_IUnknown, NULL, ppObj);
+        } __except( EXCEPTION_EXECUTE_HANDLER ) {
+            return E_FAIL;
+        }
+        return hr;
+    }
+}
 
 void OleComponent::LoadEmbeddedObject( const OUString& aTempURL )
 {
@@ -730,7 +743,7 @@ void OleComponent::LoadEmbeddedObject( const OUString& aTempURL )
     if ( FAILED( hr ) || !m_pNativeImpl->m_pIStorage )
         throw io::IOException(); // TODO: transport error code?
 
-    hr = OleLoad( m_pNativeImpl->m_pIStorage, IID_IUnknown, NULL, (void**)&m_pNativeImpl->m_pObj );
+    hr = OleLoadSeh(m_pNativeImpl->m_pIStorage, (void**)&m_pNativeImpl->m_pObj);
     if ( FAILED( hr ) || !m_pNativeImpl->m_pObj )
     {
         throw uno::RuntimeException();
@@ -963,7 +976,7 @@ void OleComponent::InitEmbeddedCopyOfLink( OleComponent* pOleLinkComponent )
                 {
                     hr = pObjectStorage->CopyTo( 0, NULL, NULL, m_pNativeImpl->m_pIStorage );
                     if ( SUCCEEDED( hr ) )
-                        hr = OleLoad( m_pNativeImpl->m_pIStorage, IID_IUnknown, NULL, (void**)&m_pNativeImpl->m_pObj );
+                        hr = OleLoadSeh(m_pNativeImpl->m_pIStorage, (void**)&m_pNativeImpl->m_pObj);
                 }
             }
         }


More information about the Libreoffice-commits mailing list