c{} (with c a cell) make Scilab crashe. 22/17122/3
Charlotte HECQUET [Thu, 27 Aug 2015 13:46:40 +0000 (15:46 +0200)]
Change-Id: Ic09a11e48e54e09c76f475900372534d6b250444

scilab/modules/ast/src/cpp/ast/run_CallExp.hpp
scilab/modules/ast/tests/unit_tests/extractEmpty.dia.ref
scilab/modules/ast/tests/unit_tests/extractEmpty.tst

index ada8530..2697538 100644 (file)
@@ -329,6 +329,15 @@ void RunVisitorT<T>::visitprivate(const CellCallExp &e)
             ast::exps_t exps = e.getArgs();
             types::typed_list *pArgs = GetArgumentList(exps);
 
+            if (pArgs->size() == 0)
+            {
+                // Case a{}
+                delete pArgs;
+                std::wostringstream os;
+                os << _W("Cell : Cannot extract without arguments.\n");
+                throw ast::InternalError(os.str(), 999, e.getFirstLocation());
+            }
+
             types::List* pList = pIT->getAs<types::Cell>()->extractCell(pArgs);
 
             if (pList == NULL)
index 9320333..c28a837 100644 (file)
@@ -29,3 +29,10 @@ assert_checkequal(a(:,:), a);
 assert_checkequal(a(1:2,1:2), a);
 assert_checkequal(a(%t), a);
 assert_checkequal(a(%f), a);
+a = ones(5,5);
+assert_checkequal(a(), a);
+a = cell(5,5);
+errmsg = msprintf(gettext("Cell : Cannot extract without arguments.\n"));
+assert_checkerror("a{}", errmsg);
+a = struct();
+assert_checkequal(a(), a);
index 03c5236..951c611 100644 (file)
@@ -33,3 +33,13 @@ assert_checkequal(a(:,:), a);
 assert_checkequal(a(1:2,1:2), a);
 assert_checkequal(a(%t), a);
 assert_checkequal(a(%f), a);
+
+a = ones(5,5);
+assert_checkequal(a(), a);
+
+a = cell(5,5);
+errmsg = msprintf(gettext("Cell : Cannot extract without arguments.\n"));
+assert_checkerror("a{}", errmsg);
+
+a = struct();
+assert_checkequal(a(), a);