* Bug #9158 fixed - zeros() called with a big number returns an empty matrix. 49/12649/2
Charlotte HECQUET [Tue, 24 Sep 2013 15:05:00 +0000 (17:05 +0200)]
Change-Id: Ifc76375c6af05d923ad86d87b1f040420cfef029

scilab/CHANGES_5.5.X
scilab/modules/elementary_functions/src/fortran/getdimfromvar.f
scilab/modules/elementary_functions/tests/nonreg_tests/bug_9158.dia.ref [new file with mode: 0644]
scilab/modules/elementary_functions/tests/nonreg_tests/bug_9158.tst [new file with mode: 0644]

index 2a1daca..2a7c77b 100644 (file)
@@ -403,6 +403,8 @@ Bug Fixes
 
 * Bug #9109 fixed - nfreq tagged as obsolete.
 
+* Bug #9158 fixed - zeros() called with a big number returns an empty matrix.
+
 * Bug #9208 fixed - Added three optional output arguments to optim(),
                     to retrieve #iterations, #evaluations and a termination indicator.
 
index 7571319..029d192 100644 (file)
@@ -30,6 +30,10 @@ c
             call error(89)
             return
          endif
+         if (stk(sadr(il+4)).ge.2.0**31) then !depends on the stack (32 bits...)
+            call error(17)
+            return
+         endif
          n=max(int(stk(sadr(il+4))),0)
       elseif(istk(il).eq.8) then
          if(istk(il+1)*istk(il+2).ne.1) then
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_9158.dia.ref b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_9158.dia.ref
new file mode 100644 (file)
index 0000000..8d2563f
--- /dev/null
@@ -0,0 +1,25 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 9158 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=9158
+//
+// <-- Short Description -->
+// zeros() called with a number greater than 2**31 returns an empty matrix
+assert_checktrue(execstr("zeros(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("zeros(1, 2**32)", "errcatch") == 17);
+// the same with eye, rand, and ones
+assert_checktrue(execstr("eye(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("eye(1, 2**32)", "errcatch") == 17);
+assert_checktrue(execstr("ones(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("ones(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("rand(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("rand(2**32, 1)", "errcatch") == 17);
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_9158.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_9158.tst
new file mode 100644 (file)
index 0000000..fdceb04
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 9158 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=9158
+//
+// <-- Short Description -->
+// zeros() called with a number greater than 2**31 returns an empty matrix
+
+assert_checktrue(execstr("zeros(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("zeros(1, 2**32)", "errcatch") == 17);
+
+// the same with eye, rand, and ones
+assert_checktrue(execstr("eye(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("eye(1, 2**32)", "errcatch") == 17);
+
+assert_checktrue(execstr("ones(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("ones(2**32, 1)", "errcatch") == 17);
+
+assert_checktrue(execstr("rand(2**32, 1)", "errcatch") == 17);
+assert_checktrue(execstr("rand(2**32, 1)", "errcatch") == 17);