* Bug #14500 fixed - Operator ".^" was broken for sparse matrices. 10/18110/2
Paul Bignier [Mon, 25 Apr 2016 08:46:46 +0000 (10:46 +0200)]
Change-Id: I72500f42429438bebf60bd67f57ed2351726ec28

scilab/CHANGES
scilab/modules/ast/src/cpp/operations/types_power.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14500.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_14500.tst [new file with mode: 0644]

index 4da92a2..9027398 100644 (file)
@@ -435,6 +435,8 @@ In 6.0.0:
 
 * Bug #14499 fixed - getd() did not update already defined functions
 
+* Bug #14500 fixed - Operator ".^" was broken for sparse matrices.
+
 
 In 6.0.0 beta-1:
 
index 376f06b..1bdc70b 100644 (file)
@@ -344,7 +344,7 @@ int PowerPolyByDouble(Polynom* _pPoly, Double* _pDouble, InternalType** _pOut)
     double* bImg    = _pDouble->getImg();
     bool bNumericallyComplex1 = _pDouble->isNumericallyComplex();
 
-    if(!bNumericallyComplex1)
+    if (!bNumericallyComplex1)
     {
         return 2;
     }
@@ -440,7 +440,7 @@ int DotPowerSpaseByDouble(Sparse* _pSp, Double* _pDouble, InternalType** _pOut)
 
     size_t iSize = _pSp->nonZeros();
     int* Col = new int[iSize];
-    int* Row = new int[iSize];
+    int* Row = new int[_pSp->getRows()];
     _pSp->getColPos(Col);
     _pSp->getNbItemByRow(Row);
     int* iPositVal = new int[iSize];
@@ -450,7 +450,6 @@ int DotPowerSpaseByDouble(Sparse* _pSp, Double* _pDouble, InternalType** _pOut)
     {
         for (int k = 0; k < Row[j]; k++)
         {
-
             iPositVal[i] = (Col[i] - 1) * _pSp->getRows() + j;
             i++;
         }
@@ -614,11 +613,11 @@ int DotPowerPolyByDouble(Polynom* _pPoly, Double* _pDouble, InternalType** _pOut
     }
 
     //delete exp
-    for(int i = 0; i < iSize; i++)
+    for (int i = 0; i < iSize; i++)
     {
         delete pDblPower[i];
     }
-    
+
     delete[] pDblPower;
 
     // delete temporary polynom
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14500.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14500.dia.ref
new file mode 100644 (file)
index 0000000..aa11ad3
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14500 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14500
+//
+// <-- Short Description -->
+// Operator ".^" was broken for sparse matrices.
+r = sprand(100, 100, 0.001);
+r.^2; // This line should not segfault
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14500.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14500.tst
new file mode 100644 (file)
index 0000000..da27f85
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14500 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14500
+//
+// <-- Short Description -->
+// Operator ".^" was broken for sparse matrices.
+
+r = sprand(100, 100, 0.001);
+r.^2; // This line should not segfault