* Bug #15034 fixed : Unable to create a structure using mlist. 64/19264/4
Simon Marchetto [Wed, 4 Oct 2017 16:26:49 +0000 (18:26 +0200)]
Crash fixed. A mlist is returned.

Change-Id: I1c0718107b8cee1a8576f42ac6631b3d673ce503

scilab/CHANGES.md
scilab/modules/ast/src/cpp/types/mlist.cpp
scilab/modules/ast/tests/nonreg_tests/bug_15034.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_15034.tst [new file with mode: 0644]

index 6f00511..19ddfef 100644 (file)
@@ -402,6 +402,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15019](http://bugzilla.scilab.org/show_bug.cgi?id=15019): Add 'csci6' in the calling of ilib_build in 'Getting started with API_Scilab' help page.
 * [#15023](http://bugzilla.scilab.org/show_bug.cgi?id=15023): `clf()` wrongly reset `figure_id`.
 * [#15024](http://bugzilla.scilab.org/show_bug.cgi?id=15024): Xcos labels were not preserved at diagram compilation.
+* [#15034](http://bugzilla.scilab.org/show_bug.cgi?id=15034): Unable to create a structure using mlist.
 * [#15037](http://bugzilla.scilab.org/show_bug.cgi?id=15037): the residu function may crash Scilab6.
 * [#15039](http://bugzilla.scilab.org/show_bug.cgi?id=15039): Added demos to showcase Xcos' new graphical features
 * [#15046](http://bugzilla.scilab.org/show_bug.cgi?id=15046): `call` couldn't mix inputs and outputs
index 3496558..0cb50be 100644 (file)
@@ -48,13 +48,15 @@ bool MList::invoke(typed_list & in, optional_list & /*opt*/, int _iRetCount, typ
 
             _out = extractStrings(stFields);
 
-            List* pList = _out->getAs<types::List>();
-            for (int i = 0; i < pList->getSize(); i++)
+            if (_out)
             {
-                out.push_back(pList->get(i));
+                List* pList = _out->getAs<types::List>();
+                for (int i = 0; i < pList->getSize(); i++)
+                {
+                    out.push_back(pList->get(i));
+                }
+                delete pList;
             }
-
-            delete pList;
         }
 
         if (!out.empty())
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15034.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_15034.dia.ref
new file mode 100644 (file)
index 0000000..bc6c1dc
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Scilab Enterprises
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 15034 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15034
+//
+// <-- Short Description -->
+// Unable to create a structure using mlist.
+a = mlist(["st", "dims", "champs"], int32([1 1]));
+disp(a);
+             (1)
+!st  dims  champs  !
+             (2)
+  1  1
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15034.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15034.tst
new file mode 100644 (file)
index 0000000..2a6e0aa
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Scilab Enterprises
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 15034 -->
+// <-- NO CHECK REF -->
+// <-- CLI SHELL MODE -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15034
+//
+// <-- Short Description -->
+// Unable to create a structure using mlist.
+
+a = mlist(["st", "dims", "champs"], int32([1 1]));
+disp(a);