chart2/source/tools/XMLRangeHelper.cxx    |   14 +++++++++++---
 sw/source/core/unocore/XMLRangeHelper.cxx |   14 +++++++++++---
 2 files changed, 22 insertions(+), 6 deletions(-)

New commits:
commit c3c9efc94f737e5f6c42db02b261d8fdb47f3d51
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Tue Oct 15 15:25:40 2024 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Wed Oct 16 20:54:36 2024 +0200

    crashtesting: assert on fdo87790-1.ods
    
    and gnome704765-1.ods
    
    Change-Id: I037b3c7d1f3887634ead05e5464435ae0fbeea60
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175028
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Jenkins

diff --git a/chart2/source/tools/XMLRangeHelper.cxx 
b/chart2/source/tools/XMLRangeHelper.cxx
index 419c75924926..3c5ed38e3130 100644
--- a/chart2/source/tools/XMLRangeHelper.cxx
+++ b/chart2/source/tools/XMLRangeHelper.cxx
@@ -20,6 +20,7 @@
 #include <XMLRangeHelper.hxx>
 #include <rtl/character.hxx>
 #include <rtl/ustrbuf.hxx>
+#include <sal/log.hxx>
 #include <osl/diagnose.h>
 #include <o3tl/string_view.hxx>
 
@@ -115,7 +116,7 @@ void lcl_getSingleCellAddressFromXMLString(
     std::u16string_view aCellStr = rXMLString.substr( nStartPos, nEndPos - 
nStartPos + 1 );
     const sal_Unicode* pStrArray = aCellStr.data();
     sal_Int32 nLength = aCellStr.size();
-    sal_Int32 i = nLength - 1, nColumn = 0;
+    sal_Int32 i = nLength - 1;
 
     // parse number for row
     while( rtl::isAsciiDigit( pStrArray[ i ] ) && i >= 0 )
@@ -131,14 +132,21 @@ void lcl_getSingleCellAddressFromXMLString(
         rOutCell.bRelativeRow = true;
 
     // parse rest for column
-    assert(i <= 6);
-    sal_Int32 nPower = 1;
+    assert(i <= 13);
+    sal_Int64 nPower = 1;
+    sal_Int64 nColumn = 0;
     while( i >= 0 && rtl::isAsciiAlpha( pStrArray[ i ] ))
     {
         nColumn += (rtl::toAsciiUpperCase(pStrArray[ i ]) - aLetterA + 1) * 
nPower;
         i--;
         nPower *= 26;
     }
+    if (nColumn < SAL_MIN_INT32 || nColumn > SAL_MAX_INT32)
+    {
+        SAL_WARN("chart2", "out of range column");
+        nColumn = 0;
+    }
+
     rOutCell.nColumn = nColumn - 1;
 
     rOutCell.bRelativeColumn = true;
diff --git a/sw/source/core/unocore/XMLRangeHelper.cxx 
b/sw/source/core/unocore/XMLRangeHelper.cxx
index 037fe76d2dbe..f8a49d6041ac 100644
--- a/sw/source/core/unocore/XMLRangeHelper.cxx
+++ b/sw/source/core/unocore/XMLRangeHelper.cxx
@@ -20,6 +20,7 @@
 #include "XMLRangeHelper.hxx"
 #include <rtl/character.hxx>
 #include <rtl/ustrbuf.hxx>
+#include <sal/log.hxx>
 #include <o3tl/string_view.hxx>
 #include <algorithm>
 
@@ -113,7 +114,7 @@ void lcl_getSingleCellAddressFromXMLString(
     std::u16string_view aCellStr = rXMLString.substr( nStartPos, nEndPos - 
nStartPos + 1 );
     const sal_Unicode* pStrArray = aCellStr.data();
     sal_Int32 nLength = aCellStr.size();
-    sal_Int32 i = nLength - 1, nColumn = 0;
+    sal_Int32 i = nLength - 1;
 
     // parse number for row
     while( rtl::isAsciiDigit( pStrArray[ i ] ) && i >= 0 )
@@ -129,14 +130,21 @@ void lcl_getSingleCellAddressFromXMLString(
         rOutCell.bRelativeRow = true;
 
     // parse rest for column
-    assert(i <= 6);
-    sal_Int32 nPower = 1;
+    assert(i <= 13);
+    sal_Int64 nPower = 1;
+    sal_Int64 nColumn = 0;
     while( i >= 0 && rtl::isAsciiAlpha( pStrArray[ i ] ))
     {
         nColumn += (rtl::toAsciiUpperCase(pStrArray[ i ]) - aLetterA + 1) * 
nPower;
         i--;
         nPower *= 26;
     }
+    if (nColumn < SAL_MIN_INT32 || nColumn > SAL_MAX_INT32)
+    {
+        SAL_WARN("sw.uno", "out of range column");
+        nColumn = 0;
+    }
+
     rOutCell.nColumn = nColumn - 1;
 
     rOutCell.bRelativeColumn = true;

Reply via email to