bug 9838 fixed - evstr froze on some specific strings. 93/4693/2
Serge Steer [Wed, 10 Aug 2011 13:14:42 +0000 (15:14 +0200)]
Change-Id: I07634052bac82b33d70c6ce6a914840dce77d65b

scilab/CHANGES_5.4.X
scilab/modules/string/macros/evstr.sci
scilab/modules/string/tests/nonreg_tests/bug_9838.dia.ref [new file with mode: 0644]
scilab/modules/string/tests/nonreg_tests/bug_9838.tst [new file with mode: 0644]

index 097b2d7..435f4df 100644 (file)
@@ -402,3 +402,5 @@ Bug fixes:
 
 * bug 9804 fixed - Starting Scilab with a external module emptied the
                    demo list menu.
+
+* bug 9838 fixed - evstr froze on some specific strings.
index 3ddcd1e..bf1703a 100644 (file)
@@ -38,13 +38,14 @@ function [%val, %ierr] = evstr(%str)
       %t1(%l) = strcat(%str(%l, :), ',') + ';'
     end
     %t1(1) = '%val=[' + %t1(1);
-    %t1($) = part(%t1($), 1:length(%t1($)) - 1) + ']';
+    %t1($) = part(%t1($), 1:length(%t1($)) - 1);
+    %t1($+1)=']';
     if lhs == 2 then
       %ierr = execstr(%t1, 'errcatch');
     else
       execstr(%t1)
     end
-    
+
   case 15 then
     // list
     %sexp = %str(2),
@@ -55,8 +56,8 @@ function [%val, %ierr] = evstr(%str)
         [%w, %ierr] = evstr(%sexp(%k_));
         %(%k_) = %w;
         if %ierr <>0  then
-         %val = [];
-         return;
+          %val = [];
+          return;
         end
       end
       [%val, %ierr] = evstr(%str(1));
@@ -66,7 +67,7 @@ function [%val, %ierr] = evstr(%str)
       end
       %val = evstr(%str(1))
     end
-    
+
   case 1 then
     // real or complex constant matrix
     %val = %str;
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_9838.dia.ref b/scilab/modules/string/tests/nonreg_tests/bug_9838.dia.ref
new file mode 100644 (file)
index 0000000..d4b59eb
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- JVM NOT MANDATORY -->
+//
+// <-- Non-regression test for bug 9838 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=9838
+//
+// <-- Short Description -->
+// evstr freezes on some specific string
+//
+assert_checkequal(evstr('//xxx'),[]);
+t=["1";
+   "2";
+   "//xxx"];
+assert_checkequal(evstr(t),[1;2]); 
+nl=ascii(10);
+t=["//comment";
+   "function y=foo(),"
+   " y=1;"
+   "endfunction"];
+t=strcat(t,nl); //make a single string that appears as a string array
+assert_checkequal(evstr(t),[]); 
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_9838.tst b/scilab/modules/string/tests/nonreg_tests/bug_9838.tst
new file mode 100644 (file)
index 0000000..0af56f9
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- JVM NOT MANDATORY -->
+//
+// <-- Non-regression test for bug 9838 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=9838
+//
+// <-- Short Description -->
+// evstr freezes on some specific string
+//
+assert_checkequal(evstr('//xxx'),[]);
+t=["1";
+   "2";
+   "//xxx"];
+assert_checkequal(evstr(t),[1;2]); 
+
+nl=ascii(10);
+t=["//comment";
+   "function y=foo(),"
+   " y=1;"
+   "endfunction"];
+
+t=strcat(t,nl); //make a single string that appears as a string array
+assert_checkequal(evstr(t),[]);