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

Caolán McNamara caolanm at redhat.com
Mon Mar 6 12:02:54 UTC 2017


 filter/source/graphicfilter/ieps/ieps.cxx |   31 ++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

New commits:
commit e214f0bd5a2a3edc331dae8d1695f4cc9f10b98a
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Mar 6 12:01:33 2017 +0000

    ofz: avoid out of memory
    
    Change-Id: I5d31f8e35b3f0613fa328125f529251fdf9657aa

diff --git a/filter/source/graphicfilter/ieps/ieps.cxx b/filter/source/graphicfilter/ieps/ieps.cxx
index 2d4da64..41802f8 100644
--- a/filter/source/graphicfilter/ieps/ieps.cxx
+++ b/filter/source/graphicfilter/ieps/ieps.cxx
@@ -418,6 +418,22 @@ void CreateMtfReplacementAction( GDIMetaFile& rMtf, SvStream& rStrm, sal_uInt32
     OString aComment("EPSReplacementGraphic");
     if ( nSizeWMF || nSizeTIFF )
     {
+        std::vector<sal_uInt8> aWMFBuf;
+        if (nSizeWMF && checkSeek(rStrm, nOrigPos + nPosWMF) && rStrm.remainingSize() >= nSizeWMF)
+        {
+            aWMFBuf.resize(nSizeWMF);
+            aWMFBuf.resize(rStrm.ReadBytes(aWMFBuf.data(), nSizeWMF));
+        }
+        nSizeWMF = aWMFBuf.size();
+
+        std::vector<sal_uInt8> aTIFFBuf;
+        if (nSizeTIFF && checkSeek(rStrm, nOrigPos + nPosTIFF) && rStrm.remainingSize() >= nSizeTIFF)
+        {
+            aTIFFBuf.resize(nSizeTIFF);
+            aTIFFBuf.resize(rStrm.ReadBytes(aTIFFBuf.data(), nSizeTIFF));
+        }
+        nSizeTIFF = aTIFFBuf.size();
+
         SvMemoryStream aReplacement( nSizeWMF + nSizeTIFF + 28 );
         sal_uInt32 nMagic = 0xc6d3d0c5;
         sal_uInt32 nPPos = 28 + nSizeWMF + nSizeTIFF;
@@ -427,18 +443,9 @@ void CreateMtfReplacementAction( GDIMetaFile& rMtf, SvStream& rStrm, sal_uInt32
         aReplacement.WriteUInt32( nMagic ).WriteUInt32( nPPos ).WriteUInt32( nPSSize )
                     .WriteUInt32( nWPos ).WriteUInt32( nSizeWMF )
                     .WriteUInt32( nTPos ).WriteUInt32( nSizeTIFF );
-        if (nSizeWMF && checkSeek(rStrm, nOrigPos + nPosWMF) && rStrm.remainingSize() >= nSizeWMF)
-        {
-            std::unique_ptr<sal_uInt8[]> pBuf(new sal_uInt8[ nSizeWMF ]);
-            rStrm.ReadBytes(pBuf.get(), nSizeWMF);
-            aReplacement.WriteBytes(pBuf.get(), nSizeWMF);
-        }
-        if (nSizeTIFF && checkSeek(rStrm, nOrigPos + nPosTIFF) && rStrm.remainingSize() >= nSizeTIFF)
-        {
-            std::unique_ptr<sal_uInt8[]> pBuf(new sal_uInt8[ nSizeTIFF ]);
-            rStrm.ReadBytes(pBuf.get(), nSizeTIFF);
-            aReplacement.WriteBytes(pBuf.get(), nSizeTIFF);
-        }
+
+        aReplacement.WriteBytes(aWMFBuf.data(), nSizeWMF);
+        aReplacement.WriteBytes(aTIFFBuf.data(), nSizeTIFF);
         rMtf.AddAction( static_cast<MetaAction*>( new MetaCommentAction( aComment, 0, static_cast<const sal_uInt8*>(aReplacement.GetData()), aReplacement.Tell() ) ) );
     }
     else


More information about the Libreoffice-commits mailing list