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

Caolán McNamara caolanm at redhat.com
Sun Oct 29 10:03:35 UTC 2017


 sw/source/filter/ww8/ww8scan.cxx |   17 +++++------------
 1 file changed, 5 insertions(+), 12 deletions(-)

New commits:
commit 98c7ab9531af4848dc289e38c5f4291788ad3d6e
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sat Oct 28 16:12:41 2017 +0100

    ofz#3871 Integer-overflow
    
    Change-Id: I5358835671fa1a57f6db5f5aeb9eec87e22c6e39
    Reviewed-on: https://gerrit.libreoffice.org/44010
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx
index 8074ada87347..6d6137e151d1 100644
--- a/sw/source/filter/ww8/ww8scan.cxx
+++ b/sw/source/filter/ww8/ww8scan.cxx
@@ -1205,17 +1205,10 @@ WW8_FC WW8PLCFx_PCD::AktPieceStartCp2Fc( WW8_CP nCp )
     if( !bVer67 )
         nFC = WW8PLCFx_PCD::TransformPieceAddress( nFC, bIsUnicode );
 
-    WW8_CP nDistance;
-    bool bFail = o3tl::checked_sub(nCp, nCpStart, nDistance);
-    if (bFail)
-    {
-        SAL_WARN("sw.ww8", "broken offset, ignoring");
-        return WW8_FC_MAX;
-    }
-
+    WW8_CP nDistance = nCp - nCpStart;
     if (bIsUnicode)
     {
-        bFail = o3tl::checked_multiply<WW8_CP>(nDistance, 2, nDistance);
+        const bool bFail = o3tl::checked_multiply<WW8_CP>(nDistance, 2, nDistance);
         if (bFail)
         {
             SAL_WARN("sw.ww8", "broken offset, ignoring");
@@ -1224,7 +1217,7 @@ WW8_FC WW8PLCFx_PCD::AktPieceStartCp2Fc( WW8_CP nCp )
     }
 
     WW8_FC nRet;
-    bFail = o3tl::checked_add(nFC, nDistance, nRet);
+    const bool bFail = o3tl::checked_add(nFC, nDistance, nRet);
     if (bFail)
     {
         SAL_WARN("sw.ww8", "broken offset, ignoring");
@@ -1893,7 +1886,7 @@ static bool WW8GetFieldPara(WW8PLCFspecial& rPLCF, WW8FieldDesc& rF)
     {
         rPLCF.advance();
 
-        if( !rPLCF.Get( rF.nLRes, pData ) )
+        if (!rPLCF.Get(rF.nLRes, pData) || rF.nLRes < 0)
             goto Err;
 
         while((static_cast<sal_uInt8*>(pData)[0] & 0x1f ) == 0x13 )
@@ -1901,7 +1894,7 @@ static bool WW8GetFieldPara(WW8PLCFspecial& rPLCF, WW8FieldDesc& rF)
             // still new (nested) beginnings ?
             WW8SkipField( rPLCF );              // nested Field in results
             rF.bResNest = true;
-            if( !rPLCF.Get( rF.nLRes, pData ) )
+            if (!rPLCF.Get(rF.nLRes, pData) || rF.nLRes < 0)
                 goto Err;
         }
         rF.nLen = rF.nLRes - rF.nSCode + 2;         // nLRes is still the final position


More information about the Libreoffice-commits mailing list