* Bug 15778 fixed: delete row/col of SparseBoolean crashed Scilab 18/20518/2
St├ęphane Mottelet [Mon, 24 Sep 2018 08:58:43 +0000 (10:58 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=15778

Change-Id: I69b206e71a4dfc44c5a85bbf5440154640f9693c

scilab/CHANGES.md
scilab/modules/ast/src/cpp/types/sparse.cpp
scilab/modules/ast/tests/nonreg_tests/bug_15778.tst [new file with mode: 0644]

index 9662ca6..626e34b 100644 (file)
@@ -612,6 +612,7 @@ Known issues
 * [#15758](http://bugzilla.scilab.org/show_bug.cgi?id=15758): sparse([0 0],1) crashes scilab (regression)
 * [#15762](http://bugzilla.scilab.org/show_bug.cgi?id=15762): `error()` refused multiline error messages.
 * [#15774](http://bugzilla.scilab.org/show_bug.cgi?id=15774): `clean()` failed on sparse complex matrix.
+* [#15778](http://bugzilla.scilab.org/show_bug.cgi?id=15778): Deleting some rows or columns of a boolean sparse array with `= []` crashed Scilab
 * [#15779](http://bugzilla.scilab.org/show_bug.cgi?id=15779): `test_run` did not accept the wildcard * in tests names.
 * [#15809](http://bugzilla.scilab.org/show_bug.cgi?id=15809): HDF5 load/save was super slow for nested lists.
 * [#15814](http://bugzilla.scilab.org/show_bug.cgi?id=15814): Selecting graphic children with booleans yielded an error.
index 808f9ae..dd6f737 100644 (file)
@@ -3487,6 +3487,8 @@ SparseBool* SparseBool::insert(typed_list* _pArgs, InternalType* _pSource)
 {
     typedef SparseBool* (SparseBool::*insert_t)(typed_list*, InternalType*);
     SparseBool* pIT = checkRef(this, (insert_t)&SparseBool::insert, _pArgs, _pSource);
+
+
     if (pIT != this)
     {
         return pIT;
@@ -3837,15 +3839,6 @@ GenericType* SparseBool::remove(typed_list* _pArgs)
         }
     }
 
-    //free allocated data
-    for (int i = 0; i < iDims; i++)
-    {
-        if (pArg[i] != (*_pArgs)[i])
-        {
-            delete pArg[i];
-        }
-    }
-
     delete[] piIndexes;
     delete[] piViewDims;
 
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15778.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15778.tst
new file mode 100644 (file)
index 0000000..a7344f3
--- /dev/null
@@ -0,0 +1,35 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - St├ęphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15778 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15778
+//
+// <-- Short Description -->
+// Deleting some rows or columns of a boolean sparse array with =[]  crashes Scilab (Regression)
+
+bs = sprand(4,4,0.5)>0.3
+bs(:,1) = []                   
+
+bs = sprand(4,4,0.5)>0.3
+bs(:,[1 3]) = []               
+
+bs = sprand(4,4,0.5)>0.3
+bs(:,$) = []                   
+
+bs = sprand(4,4,0.5)>0.3
+bs(1,:) = []                   
+
+bs = sprand(4,4,0.5)>0.3
+bs([1 3],:) = []               
+
+bs = sprand(4,4,0.5)>0.3
+bs($,:) = []                   
\ No newline at end of file