* Bug #8824 fixed - taucs_chfact returned a segfault (not the case in mode nwni). 18/11218/2
Charlotte HECQUET [Thu, 4 Apr 2013 15:45:33 +0000 (17:45 +0200)]
Change-Id: I67c117711c65457030f40c2e1c2e82f4414025fb

scilab/CHANGES_5.5.X
scilab/modules/umfpack/src/c/taucs_scilab.c
scilab/modules/umfpack/tests/nonreg_tests/bug_8824.dia.ref [new file with mode: 0644]
scilab/modules/umfpack/tests/nonreg_tests/bug_8824.tst [new file with mode: 0644]

index 47a8815..46004d8 100644 (file)
@@ -48,6 +48,8 @@ Xcos
 Bug fixes
 ==========
 
+* Bug #8824 fixed - taucs_chfact returned a segfault (not the case in mode nwni).
+
 * Bug #10862 fixed - Add a without internet connection installation
                      global configuration on the installer
 
index 4fa1171..32455dd 100644 (file)
@@ -1454,7 +1454,7 @@ recursive_amalgamate_supernodes(int           sn,
       if (i >= n) n = i+1;
     }
 
-    zcount = (double*) alloca(n * sizeof(double));
+    zcount = (double*) malloc(n * sizeof(double));
     assert(zcount);
     
     for (ip=0; ip<new_sn_size; ip++) {
@@ -1502,7 +1502,7 @@ recursive_amalgamate_supernodes(int           sn,
       assert(zcount[i] >= 0.0);
       merged_znz.zeros += zcount[i];
     }
-
+    FREE( zcount );
     /*printf("zeros after merging %.0f\n",merged_znz.zeros);*/
 
     /* voodoo constants (need some kind of a utility function */
diff --git a/scilab/modules/umfpack/tests/nonreg_tests/bug_8824.dia.ref b/scilab/modules/umfpack/tests/nonreg_tests/bug_8824.dia.ref
new file mode 100644 (file)
index 0000000..7144996
--- /dev/null
@@ -0,0 +1,34 @@
+// =============================================================================
+// 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 8824 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8824
+//
+// <-- Short Description -->
+// taucs_chfact returns a segfault (not the case in mode nwni)
+stacksize("max");
+N=512;
+h = 1/(N+1);
+x = h:h:1-h;
+y = x;
+[X,Y] = ndgrid(x,y);
+F = (-2*(%pi^2))*(cos((2*%pi)*X) .*(sin(%pi*Y) .^2) + (sin(%pi*X).^2).*cos((2*%pi)*Y));
+b = (h^2)*F(:);
+s = [-1*ones(1,N-1) 2*ones(1,N) -1*ones(1,N-1)]';
+i = [2:N 1:N 1:N-1]';
+j = [1:N-1 1:N 2:N ]';
+ij = [i j];
+T = sparse(ij,s);
+I = speye(N,N);
+A = I .*. T + T .*. I;
+assert_checktrue(execstr("hchol=taucs_chfact(A)","errcatch")==0);
+assert_checktrue(execstr("taucs_chsolve(hchol,b)","errcatch")==0);
+assert_checktrue(execstr("taucs_chdel(hchol)","errcatch")==0);
diff --git a/scilab/modules/umfpack/tests/nonreg_tests/bug_8824.tst b/scilab/modules/umfpack/tests/nonreg_tests/bug_8824.tst
new file mode 100644 (file)
index 0000000..f0ee498
--- /dev/null
@@ -0,0 +1,36 @@
+// =============================================================================
+// 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 8824 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8824
+//
+// <-- Short Description -->
+// taucs_chfact returns a segfault (not the case in mode nwni)
+
+stacksize("max");
+N=512;
+h = 1/(N+1);
+x = h:h:1-h;
+y = x;
+[X,Y] = ndgrid(x,y);
+F = (-2*(%pi^2))*(cos((2*%pi)*X) .*(sin(%pi*Y) .^2) + (sin(%pi*X).^2).*cos((2*%pi)*Y));
+b = (h^2)*F(:);
+s = [-1*ones(1,N-1) 2*ones(1,N) -1*ones(1,N-1)]';
+i = [2:N 1:N 1:N-1]';
+j = [1:N-1 1:N 2:N ]';
+ij = [i j];
+T = sparse(ij,s);
+I = speye(N,N);
+A = I .*. T + T .*. I;
+
+assert_checktrue(execstr("hchol=taucs_chfact(A)","errcatch")==0);
+assert_checktrue(execstr("taucs_chsolve(hchol,b)","errcatch")==0);
+assert_checktrue(execstr("taucs_chdel(hchol)","errcatch")==0);