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

Eike Rathke erack at redhat.com
Mon Mar 7 18:10:53 UTC 2016


 sc/source/core/tool/interpr5.cxx |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

New commits:
commit 72d710ca5a323b66a77c78f24e7017b1330cca63
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Mar 7 19:03:16 2016 +0100

    use ScMatrix::IsSizeAllocatable() instead of GetElementsMax()
    
    ... which also prevents a (theoretical?) overflow of size*size.
    
    Change-Id: I11e27718c9750ad1b17f6f16bb1b293aa4a2f574

diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx
index f9e1bde..bd73ecc 100644
--- a/sc/source/core/tool/interpr5.cxx
+++ b/sc/source/core/tool/interpr5.cxx
@@ -351,7 +351,7 @@ ScMatrixRef ScInterpreter::CreateMatrixFromDoubleRef( const FormulaToken* pToken
     SCSIZE nMatCols = static_cast<SCSIZE>(nCol2 - nCol1 + 1);
     SCSIZE nMatRows = static_cast<SCSIZE>(nRow2 - nRow1 + 1);
 
-    if (nMatRows * nMatCols > ScMatrix::GetElementsMax())
+    if (!ScMatrix::IsSizeAllocatable( nMatCols, nMatRows))
     {
         SetError(errStackOverflow);
         return nullptr;
@@ -601,7 +601,7 @@ void ScInterpreter::ScEMat()
     if ( MustHaveParamCount( GetByte(), 1 ) )
     {
         SCSIZE nDim = static_cast<SCSIZE>(::rtl::math::approxFloor(GetDouble()));
-        if ( nDim * nDim > ScMatrix::GetElementsMax() || nDim == 0)
+        if (nDim == 0 || !ScMatrix::IsSizeAllocatable( nDim, nDim))
             PushIllegalArgument();
         else
         {
@@ -800,7 +800,7 @@ void ScInterpreter::ScMatDet()
         }
         SCSIZE nC, nR;
         pMat->GetDimensions(nC, nR);
-        if ( nC != nR || nC == 0 || (sal_uLong) nC * nC > ScMatrix::GetElementsMax() )
+        if ( nC != nR || nC == 0 || !ScMatrix::IsSizeAllocatable( nC, nR) )
             PushIllegalArgument();
         else
         {
@@ -923,7 +923,7 @@ void ScInterpreter::ScMatInv()
             }
         }
 
-        if ( nC != nR || nC == 0 || (sal_uLong) nC * nC > ScMatrix::GetElementsMax() )
+        if ( nC != nR || nC == 0 || !ScMatrix::IsSizeAllocatable( nC, nR) )
             PushIllegalArgument();
         else
         {


More information about the Libreoffice-commits mailing list