Bug 13706 fixed: Random crashes with plot3d([1 1 1] 64/16264/3
Calixte DENIZET [Fri, 27 Mar 2015 12:08:33 +0000 (13:08 +0100)]
Change-Id: If55d57837be9c40bf2d21015009bde84b56740c8

scilab/CHANGES_5.5.X
scilab/modules/graphics/help/en_US/3d_plot/plot3d.xml
scilab/modules/graphics/sci_gateway/c/sci_plot3d.c
scilab/modules/graphics/tests/nonreg_tests/bug_13706.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/nonreg_tests/bug_13706.tst [new file with mode: 0644]

index e6f07f9..00f1bf8 100644 (file)
@@ -117,6 +117,8 @@ Scilab Bug Fixes
 
 * Bug #13702 fixed - Problems with * prefix for modified files in SciNotes fixed.
 
+* Bug #13706 fixed - Random crash with plot3d([1 1 1]) fixed.
+
 * Bug #13712 fixed - Details added in strcat help page for strcat(strings, "", "r") case.
 
 * Bug #13721 fixed - Writing in a file opened in r+ mode was not possible.
index 8d0cb24..f14decb 100644 (file)
@@ -25,8 +25,8 @@
             
             plot3d(xf,yf,list(zf,colors),[theta,alpha,leg,flag,ebox])
             plot3d(xf,yf,list(zf,colors),<opt_args>)
-
-           plot3d(z)
+            
+            plot3d(z)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
     </refsection>
     <refsection>
         <title>Description</title>
-       <para>
+        <para>
             <literal>plot3d(z)</literal> draws the parametric surface <literal>z=f(x,y)</literal> where
-           <literal>x=1:m</literal>, <literal>y=1:n</literal> and <literal>[m,n]=size(z)</literal>.
+            <literal>x=1:m</literal>, <literal>y=1:n</literal> and <literal>[m,n]=size(z)</literal> where <literal>m</literal> and <literal>n</literal> must be greater than 1.
         </para>
-       <para>
+        <para>
             <literal>plot3d(x,y,z,[theta,alpha,leg,flag,ebox])</literal> draws
             the parametric surface <literal>z=f(x,y)</literal>.
         </para>
index 6571632..93d91f8 100644 (file)
@@ -126,6 +126,12 @@ int sci_plot3d(char * fname, unsigned long fname_len)
             return 0;
         }
 
+        if (m1 == 1 || n1 == 1)
+        {
+            Scierror(999, _("%s: Wrong size for input argument #%d.\n"), fname, 1);
+            return 1;
+        }
+
         l3 = l1;
         m3 = m1;
         n3 = n1;
@@ -134,14 +140,14 @@ int sci_plot3d(char * fname, unsigned long fname_len)
         m2 = 1;
         n2 = n3;
         l1 = (double *)MALLOC(sizeof(double) * n1);
-        for (i = 0; i < n1; l1[i] = (++i))
+        for (i = 0; i < n1; ++i)
         {
-            ;
+            l1[i] = i + 1;
         }
         l2 = (double *)MALLOC(sizeof(double) * n2);
-        for (i = 0; i < n2; l2[i] = (++i))
+        for (i = 0; i < n2; ++i)
         {
-            ;
+            l1[i] = i + 1;
         }
 
         mustFree = 1;
@@ -275,14 +281,6 @@ int sci_plot3d(char * fname, unsigned long fname_len)
         }
     }
 
-    iflag_def[1] = 8;
-
-    GetOptionalDoubleArg(pvApiCtx, fname, 4, "theta", &theta, 1, opts);
-    GetOptionalDoubleArg(pvApiCtx, fname, 5, "alpha", &alpha, 1, opts);
-    GetLabels(pvApiCtx, fname, 6, opts, &legend);
-    GetOptionalIntArg(pvApiCtx, fname, 7, "flag", &iflag, 3, opts);
-    GetOptionalDoubleArg(pvApiCtx, fname, 8, "ebox", &ebox, 6, opts);
-
     if (m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1)
     {
         if (! (m1 == m2 && m2 == m3 && n1 == n2 && n2 == n3))
@@ -319,6 +317,15 @@ int sci_plot3d(char * fname, unsigned long fname_len)
         return 0;
     }
 
+    iflag_def[1] = 8;
+
+    GetOptionalDoubleArg(pvApiCtx, fname, 4, "theta", &theta, 1, opts);
+    GetOptionalDoubleArg(pvApiCtx, fname, 5, "alpha", &alpha, 1, opts);
+    GetLabels(pvApiCtx, fname, 6, opts, &legend);
+    GetOptionalIntArg(pvApiCtx, fname, 7, "flag", &iflag, 3, opts);
+    GetOptionalDoubleArg(pvApiCtx, fname, 8, "ebox", &ebox, 6, opts);
+
+
     getOrCreateDefaultSubwin();
 
     /******************** 24/05/2002 ********************/
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13706.dia.ref b/scilab/modules/graphics/tests/nonreg_tests/bug_13706.dia.ref
new file mode 100644 (file)
index 0000000..3740590
--- /dev/null
@@ -0,0 +1,16 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 13706 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13706
+//
+// <-- Short Description -->
+// Random crashes with plot3d([1 1 1]).
+assert_checkerror("plot3d([1 1])", _("%s: Wrong size for input argument #%d.\n"), [], "plot3d", 1);
+assert_checkerror("plot3d([1 1 1])", _("%s: Wrong size for input argument #%d.\n"), [], "plot3d", 1);
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13706.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_13706.tst
new file mode 100644 (file)
index 0000000..57b2f43
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+// <-- Non-regression test for bug 13706 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13706
+//
+// <-- Short Description -->
+// Random crashes with plot3d([1 1 1]).
+
+assert_checkerror("plot3d([1 1])", _("%s: Wrong size for input argument #%d.\n"), [], "plot3d", 1);
+assert_checkerror("plot3d([1 1 1])", _("%s: Wrong size for input argument #%d.\n"), [], "plot3d", 1);
\ No newline at end of file