[bug_14411] while loop fixed when using ctrl-C then abort 46/18646/3
Cedric Delamarre [Wed, 2 Nov 2016 16:38:57 +0000 (17:38 +0100)]
double free of the constExp
ie: while 1

Change-Id: Ie0cd297c03aecb4450df6301f9e8409fc3bd4dc3

scilab/CHANGES.md
scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14411.tst [new file with mode: 0644]

index fdf8b43..486a23e 100644 (file)
@@ -345,6 +345,7 @@ Bug Fixes
 * [#14367](http://bugzilla.scilab.org/show_bug.cgi?id=14367): `edit_curv` failed opening due to a `[]+1` operation.
 * [#14379](http://bugzilla.scilab.org/show_bug.cgi?id=14379): Problem with lists of functions having 2 arguments.
 * [#14395](http://bugzilla.scilab.org/show_bug.cgi?id=14395): `dir` displayed a []+".." warning when no subdirectory exists.
+* [#14411](http://bugzilla.scilab.org/show_bug.cgi?id=14411): abort crashes scilab in a loop while
 * [#14448](http://bugzilla.scilab.org/show_bug.cgi?id=14448): removed havewindow() was still documented
 * [#14461](http://bugzilla.scilab.org/show_bug.cgi?id=14461): Calling `grand(n, "markov", P, x0)` did not return all outputs.
 * [#14513](http://bugzilla.scilab.org/show_bug.cgi?id=14513): `isqual` comparing two built-in functions yielded an error.
index 2dd363f..793fe64 100644 (file)
@@ -585,6 +585,8 @@ void RunVisitorT<T>::visitprivate(const WhileExp  &e)
     while (pIT->isTrue())
     {
         pIT->killMe();
+        setResult(NULL);
+
         try
         {
             e.getBody().accept(*this);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14411.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14411.tst
new file mode 100644 (file)
index 0000000..9951a9d
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- INTERACTIVE TEST -->
+//
+// <-- Non-regression test for bug 14411 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14411
+//
+// <-- Short Description -->
+// abort crashes scilab in a loop while
+
+// execute in scilab
+while 1
+    a=1
+end
+
+// then ctrl-C to break the loop
+// scilab must not crashes after axecution of "abort"