* Bug #13583 fixed - getd() loading a script with clear() yielded an error 33/18333/5
Samuel GOUGEON [Thu, 30 Jun 2016 20:16:03 +0000 (22:16 +0200)]
  http://bugzilla.scilab.org/13583

Change-Id: Ia8243dd2d6c4f0f10adebc526bc407a5303ebadf

scilab/CHANGES.md
scilab/modules/functions/macros/getd.sci
scilab/modules/functions/tests/nonreg_tests/bug_13583.dia.ref [new file with mode: 0644]
scilab/modules/functions/tests/nonreg_tests/bug_13583.tst [new file with mode: 0644]
scilab/modules/functions/tests/nonreg_tests/test_getd/script1.sci [new file with mode: 0644]
scilab/modules/functions/tests/nonreg_tests/test_getd/script2.sci [new file with mode: 0644]

index 71ff6ab..4bfc446 100644 (file)
@@ -245,6 +245,7 @@ Bug Fixes
 * [Bug #9153](http://bugzilla.scilab.org/9153) fixed                   - The `isqualbitwise` help page was inaccurate and badly located
 * [Bug #11959](http://bugzilla.scilab.org/show_bug.cgi?id=11959) fixed - Allow "Zoom Area" to be clicked out of axes
 * [Bug #12110](http://bugzilla.scilab.org/show_bug.cgi?id=12110) fixed - Unable to zoom multiple axes at once
+* [Bug #13583](http://bugzilla.scilab.org/show_bug.cgi?id=13583) fixed - `getd` loading a script including a `clear` instruction yielded an error
 * [Bug #13597](http://bugzilla.scilab.org/show_bug.cgi?id=13597) fixed - `help format` claimed setting a number of digits instead of characters
 * [Bug #13757](http://bugzilla.scilab.org/show_bug.cgi?id=13757) fixed - The toolbox menu dit not load properly ATOMS modules not autoloaded.
 * [Bug #13990](http://bugzilla.scilab.org/show_bug.cgi?id=13990) fixed - `warning` with localization enabled some memory corruption
index a60a10c..fed76da 100644 (file)
@@ -26,13 +26,14 @@ function getd(path,option)
     path = pathconvert(path,%t,%t);
 
     // list the sci files
+    global lst
     lst          = listfiles(path+"*.sci",%f);
     lst_filtered = [];
 
     // remove wrong files extension
     // bug 2289
 
-    for i=1:size(lst,"*")
+    for i = 1:size(lst,"*")
         if( regexp(lst(i),"/.sci$/") <> [] ) then
             lst_filtered = [lst_filtered;lst(i)];
         end
@@ -46,20 +47,30 @@ function getd(path,option)
         return ;
     end
 
-    old = who("local");
+    // Bug http://bugzilla.scilab.org/13583 : some scripts loaded through the
+    //  loop may contain "clear" instructions deleting a) the list of files to
+    //  be processed, and b) the reference list of internal getd() variables not
+    //  to be returned.
+    //  Informations to be protected are set in global variables: lst, old
+    global old          // sets it as global, before first assignment
+    old = who("local")
     old = old(isdef(old, "l"))
     //prot = funcprot(); funcprot(0)
-    for k=1:size(lst,"*");
+    for k = 1:size(lst,"*");
+        global lst // recover it whenever it would have been cleared
         if fileparts(lst(k),"extension")==".sci" then
+            // disp(basename(lst(k))) // Beware: files are not sorted/loaded in alphabetical order
             if execstr("exec(lst(k));","errcatch")<>0 then
                 warning(msprintf(gettext("%s: Incorrect function in file %s.\n"),"getd",lst(k)))
             end
         end
     end
+    global old
     //funcprot(prot);
     new = who("local");
     new = new(isdef(new, "l"))
     new = setdiff(new, old)
+    clearglobal old lst
 
     if new<>[] then
         execstr("["+strcat(new,",")+"]=resume("+strcat(new,",")+")")
diff --git a/scilab/modules/functions/tests/nonreg_tests/bug_13583.dia.ref b/scilab/modules/functions/tests/nonreg_tests/bug_13583.dia.ref
new file mode 100644 (file)
index 0000000..57bbb04
--- /dev/null
@@ -0,0 +1,17 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aime AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 13583 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13583
+//
+// <-- Short Description -->
+// getd loading a script containing clear yielded an error
+ierr = execstr("getd(SCI + ""/modules/functions/tests/nonreg_tests/test_getd/"")", "errcatch");
+ I am executed
+assert_checktrue(ierr == 0);
diff --git a/scilab/modules/functions/tests/nonreg_tests/bug_13583.tst b/scilab/modules/functions/tests/nonreg_tests/bug_13583.tst
new file mode 100644 (file)
index 0000000..bd0fe3d
--- /dev/null
@@ -0,0 +1,17 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aime AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 13583 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13583
+//
+// <-- Short Description -->
+// getd loading a script containing clear yielded an error
+
+ierr = execstr("getd(SCI + ""/modules/functions/tests/nonreg_tests/test_getd/"")", "errcatch");
+assert_checktrue(ierr == 0);
diff --git a/scilab/modules/functions/tests/nonreg_tests/test_getd/script1.sci b/scilab/modules/functions/tests/nonreg_tests/test_getd/script1.sci
new file mode 100644 (file)
index 0000000..427d1e3
--- /dev/null
@@ -0,0 +1,10 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aime AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+function script1()
+    disp("something");
+endfunction
diff --git a/scilab/modules/functions/tests/nonreg_tests/test_getd/script2.sci b/scilab/modules/functions/tests/nonreg_tests/test_getd/script2.sci
new file mode 100644 (file)
index 0000000..65f4387
--- /dev/null
@@ -0,0 +1,12 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Pierre-Aime AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+function script2();
+    disp("something else");
+endfunction
+
+disp("I am executed");
+clear;