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

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri Jun 11 11:49:01 UTC 2021


 sc/source/filter/excel/impop.cxx |   51 ++++++++++++++++++++++++++++-----------
 1 file changed, 37 insertions(+), 14 deletions(-)

New commits:
commit b1d19950d3f89460109dfc0e3720ac22d4307ff8
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Jun 11 10:43:24 2021 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Jun 11 13:48:22 2021 +0200

    Resolves: tdf#142758 Revert record parse misunderstanding
    
    of 'Related: cid#1474351 Untrusted loop bound'
    
    and add in documentation for the records
    
    This reverts commit 2134d83b8d6e73ca8eacd812eb3431bff38c74f6.
    This reverts commit 7c2e6058439da9d061e5e0bbd07c8b6d4f2ffcbf.
    This reverts commit 3748fe3e4fc22a400b3120010192b75754e38b17.
    
    Change-Id: I5b407eb4388a8d67fc863cc6070fbbf8b15321d9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117044
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx
index 7df9e0567323..1c107d4ad092 100644
--- a/sc/source/filter/excel/impop.cxx
+++ b/sc/source/filter/excel/impop.cxx
@@ -858,16 +858,28 @@ void ImportExcel::Shrfmla()
 
 void ImportExcel::Mulrk()
 {
+    /* rw (2 bytes):  An Rw structure that specifies the row containing the
+       cells with numeric data.
+
+       colFirst (2 bytes):  A Col structure that specifies the first column in
+       the series of numeric cells within the sheet. The value of colFirst.col
+       MUST be less than or equal to 254.
+
+       rgrkrec (variable): An array of RkRec structures.  Each element in the
+       array specifies an RkRec in the row. The number of entries in the array
+       MUST be equal to the value given by the following formula:
+
+       Number of entries in rgrkrec = (colLast.col – colFirst.col +1)
+
+       colLast (2 bytes):  A Col structure that specifies the last column in
+       the set of numeric cells within the sheet. This colLast.col value MUST
+       be greater than the colFirst.col value.  */
+
     XclAddress aXclPos;
     aIn >> aXclPos;
 
-    XclAddress aCurrXclPos(aXclPos);
-    while (true)
+    for( XclAddress aCurrXclPos( aXclPos ); (aXclPos.mnCol <= aCurrXclPos.mnCol) && (aIn.GetRecLeft() > 2); ++aCurrXclPos.mnCol )
     {
-        if (aIn.GetRecLeft() < 6)
-            break;
-        if (aCurrXclPos.mnCol < aXclPos.mnCol)
-            break;
         sal_uInt16 nXF = aIn.ReaduInt16();
         sal_Int32 nRkNum = aIn.ReadInt32();
 
@@ -877,28 +889,39 @@ void ImportExcel::Mulrk()
             GetXFRangeBuffer().SetXF( aScPos, nXF );
             GetDocImport().setNumericCell(aScPos, XclTools::GetDoubleFromRK(nRkNum));
         }
-        ++aCurrXclPos.mnCol;
     }
 }
 
 void ImportExcel::Mulblank()
 {
+    /* rw (2 bytes):  An Rw structure that specifies a row containing the blank
+       cells.
+
+       colFirst (2 bytes):  A Col structure that specifies the first column in
+       the series of blank cells within the sheet. The value of colFirst.col
+       MUST be less than or equal to 254.
+
+       rgixfe (variable): An array of IXFCell structures. Each element of this
+       array contains an IXFCell structure corresponding to a blank cell in the
+       series. The number of entries in the array MUST be equal to the value
+       given by the following formula:
+
+       Number of entries in rgixfe = (colLast.col – colFirst.col +1)
+
+       colLast (2 bytes):  A Col structure that specifies the last column in
+       the series of blank cells within the sheet. This colLast.col value MUST
+       be greater than colFirst.col value. */
+
     XclAddress aXclPos;
     aIn >> aXclPos;
 
-    XclAddress aCurrXclPos(aXclPos);
-    while (true)
+    for( XclAddress aCurrXclPos( aXclPos ); (aXclPos.mnCol <= aCurrXclPos.mnCol) && (aIn.GetRecLeft() > 2); ++aCurrXclPos.mnCol )
     {
-        if (aIn.GetRecLeft() < 2)
-            break;
-        if (aCurrXclPos.mnCol < aXclPos.mnCol)
-            break;
         sal_uInt16 nXF = aIn.ReaduInt16();
 
         ScAddress aScPos( ScAddress::UNINITIALIZED );
         if( GetAddressConverter().ConvertAddress( aScPos, aCurrXclPos, GetCurrScTab(), true ) )
             GetXFRangeBuffer().SetBlankXF( aScPos, nXF );
-        ++aCurrXclPos.mnCol;
     }
 }
 


More information about the Libreoffice-commits mailing list