* Bug 16208 fixed: 3D string matrix may crash old C-api gateways 02/21102/3
St├ęphane MOTTELET [Mon, 7 Oct 2019 11:39:08 +0000 (13:39 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=16208

Change-Id: I5de8e746ce2f1976a9b2cb1f5a2bbe8e697ee4f0

scilab/CHANGES.md
scilab/modules/api_scilab/src/cpp/api_stack_string.cpp
scilab/modules/api_scilab/tests/nonreg_tests/bug_16208.tst [new file with mode: 0644]

index 1601275..d0a2679 100644 (file)
@@ -185,5 +185,6 @@ Bug Fixes
 * [#16111](http://bugzilla.scilab.org/show_bug.cgi?id=16111): `isglobal` was not supporting non-scalar array of strings as input.
 * [#16144](http://bugzilla.scilab.org/show_bug.cgi?id=16144): Addition of sparse matrices gave incorrect results.
 * [#16174](http://bugzilla.scilab.org/show_bug.cgi?id=16174): `libraryinfo` yielded 0x0 matrix of strings for libs without macro
+* [#16208](http://bugzilla.scilab.org/show_bug.cgi?id=16208): Using 3D string matrix with old C-api gateways may crash Scilab.
 
 
index 941dfcb..0071997 100644 (file)
@@ -87,7 +87,7 @@ SciErr getMatrixOfString(void* _pvCtx, int* _piAddress, int* _piRows, int* _piCo
     types::String *pS = ((types::InternalType*)_piAddress)->getAs<types::String>();
 
     //non cummulative length
-    int iSize = pS->getSize();
+    int iSize = (*_piRows)*(*_piCols);
     if (_pstStrings == NULL || *_pstStrings == NULL)
     {
         for (int i = 0 ; i < iSize; i++)
diff --git a/scilab/modules/api_scilab/tests/nonreg_tests/bug_16208.tst b/scilab/modules/api_scilab/tests/nonreg_tests/bug_16208.tst
new file mode 100644 (file)
index 0000000..9f6e850
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - 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 16208 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16208
+//
+// <-- Short Description -->
+// Using 3D string matrix with old C-api gateways may crash Scilab
+
+x=string([1 2;3 4]);x(:,:,2)=x;
+assert_checkequal(gettext(x),x(:,:,1))
+