* Bug #14082 fixed - m=1; m()=1; made Scilab crash. 40/17140/3
Charlotte HECQUET [Mon, 31 Aug 2015 09:42:17 +0000 (11:42 +0200)]
Change-Id: Icfdc18ec79e51ca7d58caacbd0d8227322329cae

scilab/CHANGES_6.0.X
scilab/modules/ast/src/cpp/ast/visitor_common.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14082.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_14082.tst [new file with mode: 0644]
scilab/modules/ast/tests/unit_tests/insert.dia.ref
scilab/modules/ast/tests/unit_tests/insert.tst

index ed68163..432ce71 100644 (file)
@@ -43,6 +43,8 @@ Scilab Bug Fixes
 
 * Bug #14058 fixed - Scilab crashed with 'file("close", file())' instruction
 
+* Bug #14082 fixed - m=1; m()=1; made Scilab crash.
+
 * Bug #14093 fixed - atanh returns NaN for values with an absolute value greater than 1
 
 * Bug #14095 fixed - Scilab crashed when a .fig file was loaded with loadmatfile function.
index 4ff183c..a2dd8ae 100644 (file)
@@ -1956,6 +1956,14 @@ InternalType* insertionCall(const ast::Exp& e, typed_list* _pArgs, InternalType*
         //call type insert function
         InternalType* pRet = NULL;
 
+        // case m=x; m()=x;
+        if (_pArgs == NULL || _pArgs->size() == 0)
+        {
+            std::wostringstream os;
+            os << _W("Wrong insertion : Cannot insert without arguments.");
+            throw ast::InternalError(os.str(), 999, e.getLocation());
+        }
+
         //check types compatibilties
         if (_pVar->isDouble() && _pInsert->isDouble())
         {
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14082.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14082.dia.ref
new file mode 100644 (file)
index 0000000..fe8d06a
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// 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.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14082 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14082
+//
+// <-- Short Description -->
+// m=1; m()=1; makes Scilab crash.
+m = 1;
+errmsg = msprintf(gettext("Wrong insertion : Cannot insert without arguments."));
+assert_checkerror("m()=1", errmsg);
+assert_checkerror("m()=""string""", errmsg);
+m = "b";
+assert_checkerror("m()=1", errmsg);
+assert_checkerror("m()=""string""", errmsg);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14082.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14082.tst
new file mode 100644 (file)
index 0000000..a616cb3
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// 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.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14082 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14082
+//
+// <-- Short Description -->
+// m=1; m()=1; makes Scilab crash.
+
+m = 1;
+errmsg = msprintf(gettext("Wrong insertion : Cannot insert without arguments."));
+assert_checkerror("m()=1", errmsg);
+assert_checkerror("m()=""string""", errmsg);
+
+m = "b";
+assert_checkerror("m()=1", errmsg);
+assert_checkerror("m()=""string""", errmsg);
index c78da8e..e8bab49 100644 (file)
@@ -419,3 +419,5 @@ assert_checktrue(err <> 0);
 errmsg = msprintf(gettext("Wrong insertion : Cannot insert without arguments."));
 assert_checkerror("a()=1;", errmsg);
 assert_checkerror("a{}=1;", errmsg);
+a=1;
+assert_checkerror("a()=1;", errmsg);
index b639172..a720668 100644 (file)
@@ -524,3 +524,5 @@ assert_checktrue(err <> 0);
 errmsg = msprintf(gettext("Wrong insertion : Cannot insert without arguments."));
 assert_checkerror("a()=1;", errmsg);
 assert_checkerror("a{}=1;", errmsg);
+a=1;
+assert_checkerror("a()=1;", errmsg);