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

Caolán McNamara caolanm at redhat.com
Tue Nov 7 20:13:58 UTC 2017


 sc/source/filter/lotus/filter.cxx |   40 +++++++++++++++++++++++++++-----------
 1 file changed, 29 insertions(+), 11 deletions(-)

New commits:
commit 6803f3ee3c9c8f2d52c73d79ec3d3d479d6539fb
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Nov 7 12:24:44 2017 +0000

    ofz 1-2-3 mem leak
    
    Change-Id: I72b633b27578815fb0951e2bfac755fce51203f1
    Reviewed-on: https://gerrit.libreoffice.org/44400
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sc/source/filter/lotus/filter.cxx b/sc/source/filter/lotus/filter.cxx
index 5da07361ba2a..605ba6d52009 100644
--- a/sc/source/filter/lotus/filter.cxx
+++ b/sc/source/filter/lotus/filter.cxx
@@ -40,8 +40,10 @@ static ErrCode
 generate_Opcodes(LotusContext &rContext, SvStream& aStream,
                   ScfStreamProgressBar& aPrgrsBar)
 {
-    OPCODE_FKT *pOps;
-    int         nOps;
+    OPCODE_FKT *pOps = nullptr;
+    int         nOps = 0;
+
+    ErrCode nErr = ERRCODE_NONE;
 
     switch (rContext.eTyp)
     {
@@ -49,15 +51,27 @@ generate_Opcodes(LotusContext &rContext, SvStream& aStream,
         case eWK_2:
             pOps = LotusContext::pOpFkt;
             nOps = FKT_LIMIT;
-        break;
+            break;
         case eWK123:
             pOps = LotusContext::pOpFkt123;
             nOps = FKT_LIMIT123;
-        break;
-        case eWK3:      return SCERR_IMPORT_NI;
-        case eWK_Error: return SCERR_IMPORT_FORMAT;
-        default:        return SCERR_IMPORT_UNKNOWN_WK;
-     }
+            break;
+        case eWK3:
+            nErr = SCERR_IMPORT_NI;
+            break;
+        case eWK_Error:
+            nErr = SCERR_IMPORT_FORMAT;
+            break;
+        default:
+            nErr = SCERR_IMPORT_UNKNOWN_WK;
+            break;
+    }
+
+    if (nErr != ERRCODE_NONE)
+    {
+        MemDelete(rContext);
+        return nErr;
+    }
 
     // #i76299# seems that SvStream::IsEof() does not work correctly
     aStream.Seek( STREAM_SEEK_TO_END );
@@ -72,7 +86,10 @@ generate_Opcodes(LotusContext &rContext, SvStream& aStream,
         if( nOpcode == LOTUS_EOF )
             rContext.bEOF = true;
         else if( nOpcode == LOTUS_FILEPASSWD )
-            return SCERR_IMPORT_FILEPASSWD;
+        {
+            nErr = SCERR_IMPORT_FILEPASSWD;
+            break;
+        }
         else if( nOpcode < nOps )
             pOps[ nOpcode ] (rContext, aStream, nLength);
         else if (rContext.eTyp == eWK123 && nOpcode == LOTUS_PATTERN)
@@ -101,9 +118,10 @@ generate_Opcodes(LotusContext &rContext, SvStream& aStream,
 
     MemDelete(rContext);
 
-    rContext.pDoc->CalcAfterLoad();
+    if (nErr == ERRCODE_NONE)
+        rContext.pDoc->CalcAfterLoad();
 
-    return ERRCODE_NONE;
+    return nErr;
 }
 
 WKTYP ScanVersion(SvStream& aStream)


More information about the Libreoffice-commits mailing list