* Bug #8745 fixed - Extracting from an empty matrix automatically returned an empty... 42/11942/3
Charlotte HECQUET [Thu, 4 Jul 2013 15:40:53 +0000 (17:40 +0200)]
Change-Id: I51d332e4f31adf7fa34ba5a6f394830860817bc7

scilab/CHANGES_5.5.X
scilab/modules/double/sci_gateway/fortran/matext1.f
scilab/modules/double/sci_gateway/fortran/matext2.f
scilab/modules/double/tests/nonreg_tests/bug_8745.dia.ref [new file with mode: 0644]
scilab/modules/double/tests/nonreg_tests/bug_8745.tst [new file with mode: 0644]

index 6711174..9e365c7 100644 (file)
@@ -47,6 +47,8 @@ Scilab Bug Fixes
 
 * Bug #8337 fixed - mtlb_rand now uses the "uniform" rule, whatever the random rule set is.
 
+* Bug #8745 fixed - Extracting from an empty matrix automatically returned an empty matrix.
+
 * Bug #9031 fixed - Misalignment of text when using xstring with a matrix fixed.
 
 * Bug #9033 fixed - auto_dimensionning property for text handles was not documented.
index d51a3fd..2a826f3 100644 (file)
@@ -52,6 +52,15 @@ c     implied polynomials vector extraction
 
       if(mn2.eq.0) then 
 c     .  arg2=[]
+         if(stk(sadr(il1+4)).le.0.and.   !index<=0
+     &   abs(istk(il1)).ne.4.or.         !type(index)!=4 (no error if index=%t)
+     &   abs(istk(il1)).ne.1.and.        !type(index)!=1 (no error if index>0)
+     &   abs(istk(il1)).ne.2.and.        !type(index)!=2 (no error if index=$)
+     &   abs(istk(il1)).ne.4.and.        
+     &   abs(istk(il1)).ne.129) then     !type(index)!=129 (no error if index=1:$)
+            call error(21)
+            return
+         endif   
          if(m1.le.0) then
 c            arg2(:) or arg2([])
             il1=iadr(lstk(top))
index 7a249cb..34d0bbe 100644 (file)
@@ -54,6 +54,21 @@ c     arg3(arg1,arg2)
       endif
       if(mn3.eq.0) then 
 c     .  arg3=[]
+         if(stk(sadr(il2+4)).le.0.and.   !index1<=0
+     &   abs(istk(il2)).ne.4.or.         !type(index1)!=4 (no error if index1=%t)
+     &   abs(istk(il2)).ne.1.and.        !type(index1)!=1 (no error if index1>0)
+     &   abs(istk(il2)).ne.2.and.        !type(index1)!=2 (no error if index1=$)
+     &   abs(istk(il2)).ne.4.and.
+     &   abs(istk(il2)).ne.129.or.       !type(index1)!=129 (no error if index1=1:$)
+     &   stk(sadr(il1+4)).le.0.and.
+     &   abs(istk(il1)).ne.4.or.
+     &   abs(istk(il1)).ne.1.and.
+     &   abs(istk(il1)).ne.2.and.
+     &   abs(istk(il1)).ne.4.and.
+     &   abs(istk(il1)).ne.129) then
+            call error(21)
+            return
+         endif 
          if(m1.le.0.or.m2.le.0) then
             il1=iadr(lstk(top))
             istk(il1)=1
diff --git a/scilab/modules/double/tests/nonreg_tests/bug_8745.dia.ref b/scilab/modules/double/tests/nonreg_tests/bug_8745.dia.ref
new file mode 100644 (file)
index 0000000..d9f38c0
--- /dev/null
@@ -0,0 +1,42 @@
+// =============================================================================
+// 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.
+// =============================================================================
+//
+//
+// <-- Non-regression test for bug 8745 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8745
+//
+// <-- Short Description -->
+//
+// Extracting from an empty matrix automatically returns an empty matrix
+A=[];
+errmsg=msprintf(_("Invalid index.\n"));
+assert_checkerror("A(-1)", errmsg);
+assert_checkerror("A(cos)", errmsg);
+assert_checkerror("A(""x"")", errmsg);
+assert_checkequal(A(1:$), []);
+assert_checkequal(A($), []);
+assert_checkequal(A(%t), []);
+assert_checkerror("A(-1, -1)", errmsg);
+assert_checkerror("A(1, -1)", errmsg);
+assert_checkerror("A(-1, 1)", errmsg);
+assert_checkerror("A(cos, cos)", errmsg);
+assert_checkerror("A(cos, 1)", errmsg);
+assert_checkerror("A(1, cos)", errmsg);
+assert_checkerror("A(""x"", ""x"")", errmsg);
+assert_checkerror("A(1, ""x"")", errmsg);
+assert_checkerror("A(""x"", 1)", errmsg);
+assert_checkequal(A(1:$,1:$), []);
+assert_checkequal(A(1:$,1), []);
+assert_checkequal(A(1, 1:$), []);
+assert_checkequal(A($, $), []);
+assert_checkequal(A(1, $), []);
+assert_checkequal(A($, 1), []);
+assert_checkequal(A(%t, %t), []);
+assert_checkequal(A(1, %t), []);
+assert_checkequal(A(%t, 1), []);
diff --git a/scilab/modules/double/tests/nonreg_tests/bug_8745.tst b/scilab/modules/double/tests/nonreg_tests/bug_8745.tst
new file mode 100644 (file)
index 0000000..241eef1
--- /dev/null
@@ -0,0 +1,44 @@
+// =============================================================================
+// 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.
+// =============================================================================
+//
+//
+// <-- Non-regression test for bug 8745 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8745
+//
+// <-- Short Description -->
+//
+// Extracting from an empty matrix automatically returns an empty matrix
+
+A=[];
+errmsg=msprintf(_("Invalid index.\n"));
+assert_checkerror("A(-1)", errmsg);
+assert_checkerror("A(cos)", errmsg);
+assert_checkerror("A(""x"")", errmsg);
+assert_checkequal(A(1:$), []);
+assert_checkequal(A($), []);
+assert_checkequal(A(%t), []);
+
+assert_checkerror("A(-1, -1)", errmsg);
+assert_checkerror("A(1, -1)", errmsg);
+assert_checkerror("A(-1, 1)", errmsg);
+assert_checkerror("A(cos, cos)", errmsg);
+assert_checkerror("A(cos, 1)", errmsg);
+assert_checkerror("A(1, cos)", errmsg);
+assert_checkerror("A(""x"", ""x"")", errmsg);
+assert_checkerror("A(1, ""x"")", errmsg);
+assert_checkerror("A(""x"", 1)", errmsg);
+assert_checkequal(A(1:$,1:$), []);
+assert_checkequal(A(1:$,1), []);
+assert_checkequal(A(1, 1:$), []);
+assert_checkequal(A($, $), []);
+assert_checkequal(A(1, $), []);
+assert_checkequal(A($, 1), []);
+assert_checkequal(A(%t, %t), []);
+assert_checkequal(A(1, %t), []);
+assert_checkequal(A(%t, 1), []);