* Bug #14490 fixed - plot2d crashed when leg parameter was a vector. 29/19529/2
Adeline CARNIS [Fri, 10 Nov 2017 09:40:17 +0000 (10:40 +0100)]
Change-Id: Iaff804916d807ba74be793ee2539378f0f1c5967

scilab/CHANGES.md
scilab/modules/graphics/src/c/GetCommandArg.c
scilab/modules/graphics/tests/nonreg_tests/bug_14490.tst [new file with mode: 0644]

index 381a2a4..5de245c 100644 (file)
@@ -406,6 +406,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#14376](http://bugzilla.scilab.org/show_bug.cgi?id=14376): `input()` was broken: \n was introduced before prompting; multiple prompts occurred; the output value could be missing; "%" "\n" "\t" were no longer supported in messages...
 * [#14399](http://bugzilla.scilab.org/show_bug.cgi?id=14399): `whereami`: wrong information (line numbers).
 * [#14424](http://bugzilla.scilab.org/show_bug.cgi?id=14424): There were some troubles with `input`.
+* [#14490](http://bugzilla.scilab.org/show_bug.cgi?id=14490): `plot2d` crashed when leg parameter was a vector. 
 * [#14531](http://bugzilla.scilab.org/show_bug.cgi?id=14531): It was not possible to specify SCIHOME as a start-up option.
 * [#14532](http://bugzilla.scilab.org/show_bug.cgi?id=14532): `test_run` failed for toolboxes that are not autoloaded.
 * [#14544](http://bugzilla.scilab.org/show_bug.cgi?id=14544): `scatter` and `scatter3` canceled any upstream `drawlater` instruction.
index 2a5fd19..8e18b86 100644 (file)
@@ -287,6 +287,11 @@ int get_legend_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char **
 
         if (iType)
         {
+            if (isScalar(_pvCtx, piAddr) == 0 || iType != 10)
+            {
+                Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), fname, pos);
+                return 0;
+            }
             if (getAllocatedSingleString(_pvCtx, piAddr, &pstData))
             {
                 return 0;
@@ -301,6 +306,14 @@ int get_legend_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char **
     else if ((kopt = FindOpt(_pvCtx, "leg", opts)) >= 0)
     {
         char* pstData = NULL;
+        int iType = 0;
+        getVarType(_pvCtx, opts[kopt].piAddr, &iType);
+
+        if (isScalar(_pvCtx, opts[kopt].piAddr) == 0 || iType != 10)
+        {
+            Scierror(999, _("%s: Wrong type for input argument #%d: A single string expected.\n"), fname, kopt);
+            return 0;
+        }
         if (getAllocatedSingleString(_pvCtx, opts[kopt].piAddr, &pstData))
         {
             return 0;
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_14490.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_14490.tst
new file mode 100644 (file)
index 0000000..64d3f2b
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - ESI Group - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 14490 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14490
+//
+// <-- Short Description -->
+// plot2d crashed when leg parameter was a vector. 
+
+aa = [1 2 3]' * [0.2 0.3];
+assert_checkfalse(execstr("plot2d(aa, leg = [''1''; ''2''])"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A single string expected.\n"), "plot2d", 2);
+assert_checkerror("plot2d(aa, leg = [''1''; ''2''])", refMsg);
+
+assert_checkfalse(execstr("plot2d(aa, leg = [1; 2])"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: A single string expected.\n"), "plot2d", 2);
+assert_checkerror("plot2d(aa, leg = [1; 2])", refMsg);
\ No newline at end of file