* Bug #16408 fixed - toJSON(var, filename, indent) crashed Scilab. 57/21457/2
Adeline CARNIS [Tue, 21 Apr 2020 14:24:37 +0000 (16:24 +0200)]
Change-Id: I3b71dbdd5879c1cacc9f02221f42f1c6a3fe6daa

scilab/CHANGES.md
scilab/modules/webtools/help/en_US/toJSON.xml
scilab/modules/webtools/sci_gateway/cpp/sci_toJSON.cpp
scilab/modules/webtools/tests/nonreg_tests/bug_16408.tst [new file with mode: 0644]

index cea824a..40b1044 100644 (file)
@@ -276,6 +276,7 @@ Bug Fixes
 * [#16399](https://bugzilla.scilab.org/16399): `mtlb_zeros([])` was crashing Scilab.
 * [#16401](https://bugzilla.scilab.org/16401): global `external_object_java` class was crashing Scilab.
 * [#16403](https://bugzilla.scilab.org/16403): 1D extraction of matrix with implicit index had wrong dimensions.
+* [#16408](https://bugzilla.scilab.org/16408): toJSON(var, indent, filename) is the right call sequence. Documentation has been udpated.
 
 
 ### Bugs fixed in 6.1.0:
index 1e85cfd..e483429 100644 (file)
@@ -26,8 +26,9 @@
         <title>Syntax</title>
         <synopsis>
             result = toJSON(var)
+            result = toJSON(var, indent)
             result = toJSON(var, filename)
-            result = toJSON(var, filename, indent)
+            result = toJSON(var, indent, filename)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
index 8a8a287..e1a3f82 100644 (file)
@@ -96,7 +96,7 @@ int sci_toJSON(scilabEnv env, int nin, scilabVar *in, int nopt, scilabOpt opt, i
         case 3:
         {
             //must be a scalar double or single string
-            if (!scilab_isDouble(env, in[1]) && !scilab_isScalar(env, in[1]))
+            if (!scilab_isDouble(env, in[1]) || !scilab_isScalar(env, in[1]))
             {
                 Scierror(999, "%s: Wrong type for input argument #%d: double expected.\n", name.data(), 2);
                 return STATUS_ERROR;
@@ -107,7 +107,7 @@ int sci_toJSON(scilabEnv env, int nin, scilabVar *in, int nopt, scilabOpt opt, i
             indent = (int)dbl;
 
             //must be a scalar double or single string
-            if (!scilab_isString(env, in[2]) && !isScalar(env, in[2]))
+            if (!scilab_isString(env, in[2]) || !isScalar(env, in[2]))
             {
                 Scierror(999, "%s: Wrong type for input argument #%d: string expected.\n", name.data(), 3);
                 return STATUS_ERROR;
diff --git a/scilab/modules/webtools/tests/nonreg_tests/bug_16408.tst b/scilab/modules/webtools/tests/nonreg_tests/bug_16408.tst
new file mode 100644 (file)
index 0000000..fdd53cc
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - ESI Group - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+
+// <-- Non-regression test for bug 16408 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=16408
+//
+// <-- Short Description -->
+//    toJSON(var, filename, indent) is wrong and crashed.
+//    toJSON(var, indent, filename) is the right call sequence. Documentation
+//    has been udpated.
+// =============================================================================
+
+assert_checkfalse(execstr("toJSON([""a"" ""b""], tempname(), 1)"   ,"errcatch") == 0);
+refMsg = msprintf(_("%s: Wrong type for input argument #%d: double expected.\n"), "toJSON", 2);
+assert_checkerror("toJSON([""a"" ""b""], tempname(), 1)", refMsg);