[bug_14808] Extration using bad indexes fixed. 25/18625/2
Cedric Delamarre [Fri, 21 Oct 2016 15:07:53 +0000 (17:07 +0200)]
Change-Id: I3af32059e4d8bb7d87b2baf53ec21e9ae6d1282a

scilab/modules/ast/src/cpp/types/arrayof.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14808.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_14808.tst [new file with mode: 0644]

index 63d4bd0..ebe8e98 100644 (file)
@@ -999,8 +999,14 @@ GenericType* ArrayOf<T>::extract(typed_list* _pArgs)
         //index are ":"
         bool isForceColVector = il.size() == 4;
 
+        if (start < 1 || end < 1)
+        {
+            return NULL;
+        }
+
         //std::cout << start << ":" << step << ":" << end << std::endl;
         int size = static_cast<int>((end - start) / step + 1);
+
         if (size <= 0 || m_iSize == 0)
         {
             return createEmpty();
@@ -1675,7 +1681,7 @@ bool ArrayOf<T>::invoke(typed_list & in, optional_list & /*opt*/, int /*_iRetCou
         if (!_out)
         {
             std::wostringstream os;
-            os << _W("Invalid index.") << std::endl;
+            os << _W("Invalid index.\n");
             throw ast::InternalError(os.str(), 999, e.getLocation());
         }
         out.push_back(_out);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14808.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14808.dia.ref
new file mode 100644 (file)
index 0000000..5705661
--- /dev/null
@@ -0,0 +1,17 @@
+// =============================================================================
+// 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 -->
+//
+// <-- Non-regression test for bug 14808 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14808
+//
+// <-- Short Description -->
+// E=[ 'A' 'B' 'C' 'D' 'E']  ,  E(0:0) Crash Scilab Console
+refMsg = msprintf(_("Invalid index.\n"));
+assert_checkerror("E=[ ""A"" ""B"" ""C"" ""D"" ""E""];E(0:0)", refMsg);
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14808.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14808.tst
new file mode 100644 (file)
index 0000000..636f81f
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// 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 -->
+//
+// <-- Non-regression test for bug 14808 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14808
+//
+// <-- Short Description -->
+// E=[ 'A' 'B' 'C' 'D' 'E']  ,  E(0:0) Crash Scilab Console
+
+refMsg = msprintf(_("Invalid index.\n"));
+assert_checkerror("E=[ ""A"" ""B"" ""C"" ""D"" ""E""];E(0:0)", refMsg);