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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sat Nov 24 06:35:41 PST 2012


 sot/source/sdstor/stgelem.cxx |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

New commits:
commit 4a27bce9c49539c942af27b180ba22f83a12d8e1
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Nov 22 22:29:11 2012 +0000

    Resolves: fdo#53909 STG_FREE sector locations rejected
    
    (cherry picked from commit ef9f9b750eac2966634c385a2021716c4de0e4cd)
    
    Conflicts:
    	sot/source/sdstor/stgelem.cxx
    
    Reviewed-on: https://gerrit.libreoffice.org/1150
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
    Tested-by: Stephan Bergmann <sbergman at redhat.com>
    Signed-off-by: Michael Meeks <michael.meeks at suse.com>
    
    Conflicts:
    
    	sot/source/sdstor/stgelem.cxx
    
    Change-Id: I6f71c7e3cfeeba8a76096d5be68838b8d401c580

diff --git a/sot/source/sdstor/stgelem.cxx b/sot/source/sdstor/stgelem.cxx
index 1af72f9..e0d738a 100644
--- a/sot/source/sdstor/stgelem.cxx
+++ b/sot/source/sdstor/stgelem.cxx
@@ -191,6 +191,14 @@ static bool lcl_wontoverflow(short shift)
     return shift >= 0 && shift < (short)sizeof(short) * 8 - 1;
 }
 
+static bool isKnownSpecial(sal_Int32 nLocation)
+{
+    return (nLocation == STG_FREE ||
+            nLocation == STG_EOF ||
+            nLocation == STG_FAT ||
+            nLocation == STG_MASTER);
+}
+
 // Perform thorough checks also on unknown variables
 sal_Bool StgHeader::Check()
 {
@@ -202,8 +210,8 @@ sal_Bool StgHeader::Check()
             && nFATSize > 0
             && nTOCstrm >= 0
             && nThreshold > 0
-            && ( nDataFAT == -2 || ( nDataFAT >= 0 && nDataFATSize > 0 ) )
-            && ( nMasterChain == -2 || ( nMasterChain >=0 && nMaster > 109 ) )
+            && ( isKnownSpecial(nDataFAT) || ( nDataFAT >= 0 && nDataFATSize > 0 ) )
+            && ( isKnownSpecial(nMasterChain) || nMasterChain >=0 )
             && nMaster >= 0;
 }
 
@@ -404,7 +412,7 @@ sal_Bool StgEntry::Load( const void* pFrom, sal_uInt32 nBufSize )
     if (n > nMaxLegalStr)
         return sal_False;
 
-	if ((nSize < 0 && cType != STG_STORAGE) || (nPage1 < 0 && nPage1 != -2))
+    if ((nSize < 0 && cType != STG_STORAGE) || (nPage1 < 0 && !isKnownSpecial(nPage1)))
     {
         // the size makes no sense for the substorage
         // TODO/LATER: actually the size should be an unsigned value, but in this case it would mean a stream of more than 2Gb


More information about the Libreoffice-commits mailing list