[Libreoffice-commits] .: Branch 'libreoffice-3-5' - svx/source

Michael Meeks michael at kemper.freedesktop.org
Wed Feb 29 21:33:04 PST 2012


 svx/source/svdraw/svdograf.cxx |    8 ++++++++
 1 file changed, 8 insertions(+)

New commits:
commit 63a480aac59d459e9f759c5a346bebdda0c78acd
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Feb 29 22:34:51 2012 +0100

    fdo#46340: fix crash in SdrGrafObj::getInputStream:
    
    Add the ridiculous hack that used to be here (and distributed across
    various GetDocumentStream methods to make it non-obvious)
    that makes this not crash by accident.
    
    (regression from fd95f1ab6220c6a530fd2e4e727417f504a5db51)
    
    Signed-off-by: Michael Meeks <michael.meeks at suse.com>

diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index c82b5fe..e6ed8a6 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -1310,6 +1310,14 @@ Reference< XInputStream > SdrGrafObj::getInputStream()
             ::comphelper::LifecycleProxy proxy;
             xStream.set(
                 pModel->GetDocumentStream(pGraphic->GetUserData(), proxy));
+            // fdo#46340: this may look completely insane, and it is,
+            // but it also prevents a crash: the LifecycleProxy will go out
+            // of scope, but the xStream must be returned; the UcbStreamHelper
+            // will actually copy the xStream to a temp file (because it is
+            // not seekable), which makes it not crash...
+            SvStream *const pStream =
+                utl::UcbStreamHelper::CreateStream(xStream);
+            xStream.set(new utl::OInputStreamWrapper(pStream, true));
         }
         else if( pGraphic && GetGraphic().IsLink() )
         {


More information about the Libreoffice-commits mailing list