[bug_15300] Double free fixed on ArrayListExp 81/19481/2
Cedric Delamarre [Thu, 12 Oct 2017 13:44:20 +0000 (15:44 +0200)]
  test_run ast bug_15300
  test_run ast bug_15300 mode_nwni_profiling

Change-Id: Id5c6a383008e35b07c9ef909bddaeeb11e9d58ae

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

index 0740db5..3ae9b35 100644 (file)
@@ -457,6 +457,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15273](http://bugzilla.scilab.org/show_bug.cgi?id=15273): The documented order of `eval_cshep2d` second derivatives was wrong.
 * [#15282](http://bugzilla.scilab.org/show_bug.cgi?id=15282): `help_from_sci` could set an xml:id starting with the forbidden `%` character.
 * [#15285](http://bugzilla.scilab.org/show_bug.cgi?id=15285): `resize_matrix` did not manage convertion into int64 and uint64.
+* [#15300](http://bugzilla.scilab.org/show_bug.cgi?id=15300): Crash when the function name is forgotten.
 
 ### Bugs fixed in 6.0.0:
 * [#592](http://bugzilla.scilab.org/show_bug.cgi?id=592): `linspace(a, b, n<=0)` returned `b` instead of `[]`
index 2c5cfd9..6b19515 100644 (file)
@@ -43,6 +43,9 @@ void RunVisitorT<T>::visitprivate(const AssignExp  &e)
 
                 if (getResultSize() != 1)
                 {
+                    // avoid double deletion when rhs is deleted from exp and cleanResult
+                    setResult(NULL);
+
                     std::wostringstream os;
                     os << _W("Can not assign multiple value in a single variable") << std::endl;
                     //os << ((Location)e.getRightExp().getLocation()).getLocationString() << std::endl;
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15300.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15300.tst
new file mode 100644 (file)
index 0000000..c85e898
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - ESI - Delamarre Cedric
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15300 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15300
+//
+// <-- Short Description -->
+// Crash when the function name is forgotten!
+
+errmsg = gettext(_("Can not assign multiple value in a single variable"));
+assert_checkerror("A=(1,1)", errmsg);