* Bug #10168 fixed - kron produced a segfault in some cases. 03/14603/2
Charlotte HECQUET [Mon, 2 Jun 2014 14:17:11 +0000 (16:17 +0200)]
Change-Id: Ia828990223b765cff43db2a7a27d9e50bcabc8d8

scilab/CHANGES_5.5.X
scilab/modules/elementary_functions/sci_gateway/fortran/sci_f_kron.f
scilab/modules/elementary_functions/tests/nonreg_tests/bug_10168.dia.ref [new file with mode: 0644]
scilab/modules/elementary_functions/tests/nonreg_tests/bug_10168.tst [new file with mode: 0644]

index f89753f..89987be 100644 (file)
@@ -32,6 +32,8 @@ Scilab Bug Fixes
 
 * Bug #9783 fixed - Insertion overloading did not seem to work with mlists.
 
+* Bug #10168 fixed - kron produced a segfault in some cases.
+
 * Bug #10555 fixed - Scilab failed to build with some configure options.
 
 * Bug #10583 fixed - ./configure --without-xcos did not work.
index 7f78de8..1b54ec1 100644 (file)
@@ -14,6 +14,7 @@ c
       integer tops
       logical refa,refb
       integer iadr,sadr
+      double precision s
 c
       iadr(l)=l+l-1
       sadr(l)=(l/2)+1
@@ -72,6 +73,14 @@ c
       ita=istk(il+3)
       la=sadr(il+4)
       mna=ma*na
+
+c     Check if there is enough free space
+      s=dble(mnb)*dble(mna)- lstk(bot)
+      if(s.gt.0.0d0) then
+         err=s
+         call error(17)
+         return
+      endif
 c
       l=sadr(ilr+4)
       l1=l+mnb*mna*(max(itb,ita)+1)
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_10168.dia.ref b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_10168.dia.ref
new file mode 100644 (file)
index 0000000..6c9e2e5
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 10168 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=10168
+//
+// <-- Short Description -->
+// kron() produces a segfault in some cases
+a = 1:1:10000;
+b = a';
+assert_checktrue(execstr("kron(a,b)","errcatch")==17);
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_10168.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_10168.tst
new file mode 100644 (file)
index 0000000..d82a651
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Charlotte HECQUET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 10168 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=10168
+//
+// <-- Short Description -->
+// kron() produces a segfault in some cases
+
+a = 1:1:10000;
+b = a';
+assert_checktrue(execstr("kron(a,b)","errcatch")==17);