* Bug #14517 fixed - part('abcd', [0 2]) must return an error. 77/18377/2
Adeline CARNIS [Tue, 19 Jul 2016 10:27:57 +0000 (12:27 +0200)]
Change-Id: If34e19c8353ec3e22e48e503a142be199d5fc611

scilab/CHANGES.md
scilab/modules/string/sci_gateway/cpp/sci_part.cpp
scilab/modules/string/tests/nonreg_tests/bug_14517.dia.ref [new file with mode: 0644]
scilab/modules/string/tests/nonreg_tests/bug_14517.tst [new file with mode: 0644]

index 182b01e..241a579 100644 (file)
@@ -456,5 +456,6 @@ Bug Fixes
 * [Bug #14495](http://bugzilla.scilab.org/show_bug.cgi?id=14495) fixed - `consolebox` help page shew wrong syntaxes and was poor.
 * [Bug #14499](http://bugzilla.scilab.org/show_bug.cgi?id=14499) fixed - `getd` did not update already defined functions
 * [Bug #14500](http://bugzilla.scilab.org/show_bug.cgi?id=14500) fixed - Operator `.^` was broken for sparse matrices.
+* [Bug #14517](http://bugzilla.scilab.org/show_bug.cgi?id=14517) fixed - The second argument of part function accepted an index of 0 without exiting in error.
 * [Bug #14524](http://bugzilla.scilab.org/show_bug.cgi?id=14524) fixed - Numeric locales were not set to standard "C" by default at scilab startup
 * [Bug #14540](http://bugzilla.scilab.org/show_bug.cgi?id=14540) fixed - Datatips did not clip outside axes bounds
index 195cc44..c575fe5 100644 (file)
@@ -83,6 +83,12 @@ types::Function::ReturnValue sci_part(types::typed_list &in, int _iRetCount, typ
     for (int i = 0 ; i < pD->getSize() ; i++)
     {
         piIndex[i] = static_cast<int>(pD->getReal()[i]);
+        if (piIndex[i] < 1)
+        {
+            Scierror(36, _("%s: Wrong values for input argument #%d: Must be >= 1.\n"), "part", 2);
+            delete[] piIndex;
+            return types::Function::Error;
+        }
     }
 
     wchar_t** pwstOut = partfunctionW(pS->get(), pS->getRows(), pS->getCols(), piIndex, pD->getSize());
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_14517.dia.ref b/scilab/modules/string/tests/nonreg_tests/bug_14517.dia.ref
new file mode 100644 (file)
index 0000000..2b5f50b
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 14517 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14517
+//
+// <-- Short Description -->
+//    The second argument of part function must not contain of 0.
+// =============================================================================
+assert_checkfalse(execstr("part(""abcd"", [0 2])"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong values for input argument #%d: Must be >= 1.\n"), "part", 2);
+assert_checkerror("part(""abcd"", [0 2])", refMsg);
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_14517.tst b/scilab/modules/string/tests/nonreg_tests/bug_14517.tst
new file mode 100644 (file)
index 0000000..23b2efc
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 14517 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14517
+//
+// <-- Short Description -->
+//    The second argument of part function must not contain of 0.
+// =============================================================================
+assert_checkfalse(execstr("part(""abcd"", [0 2])"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong values for input argument #%d: Must be >= 1.\n"), "part", 2);
+assert_checkerror("part(""abcd"", [0 2])", refMsg);