* Bug 15146 fixed - lasterror() crashes Scilab when last error message is empty 69/19269/3
Simon Marchetto [Wed, 4 Oct 2017 16:41:29 +0000 (18:41 +0200)]
Change-Id: If8121765b4ff849d358091a0ddda0d091c0fbcc8

scilab/CHANGES.md
scilab/modules/core/sci_gateway/cpp/sci_lasterror.cpp
scilab/modules/core/tests/nonreg_tests/bug_15146.tst [new file with mode: 0644]

index 764960a..467de77 100644 (file)
@@ -434,6 +434,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15138](http://bugzilla.scilab.org/show_bug.cgi?id=15138): Scilab crashes at start on Windows
 * [#15139](http://bugzilla.scilab.org/show_bug.cgi?id=15139): Fix return in try/catch expression
 * [#15144](http://bugzilla.scilab.org/show_bug.cgi?id=15144): `mean` and `stdev` could not be overloaded.
+* [#15146](http://bugzilla.scilab.org/show_bug.cgi?id=15146): lasterror() crashes Scilab when last error message is empty
 * [#15148](http://bugzilla.scilab.org/show_bug.cgi?id=15148): link() doesn't return any error for a wrong flag argument value
 * [#15170](http://bugzilla.scilab.org/show_bug.cgi?id=15170): `getd` created and returned a variable `k` that could overwrite a loaded one.
 * [#15183](http://bugzilla.scilab.org/show_bug.cgi?id=15183): `ndgrid(x)` with by default `y=x` was not accepted.
index c31d740..bdae2d7 100644 (file)
@@ -68,10 +68,17 @@ types::Function::ReturnValue sci_lasterror(types::typed_list &in, int _iRetCount
             vectLines.push_back(line);
         }
 
-        // do not create an empty line if the end of the error message is '\n'
-        if (vectLines.back() == L"")
+        if (!vectLines.empty())
         {
-            vectLines.pop_back();
+            // do not create an empty line if the end of the error message is '\n'
+            if (vectLines.back() == L"")
+            {
+                vectLines.pop_back();
+            }
+        }
+        else
+        {
+            vectLines.push_back(L"");
         }
 
         types::String* StrLastError = new types::String((int)vectLines.size(), 1);
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_15146.tst b/scilab/modules/core/tests/nonreg_tests/bug_15146.tst
new file mode 100644 (file)
index 0000000..c0110ce
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// 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.
+// =============================================================================
+//
+// <-- NO CHECK REF -->
+// <-- Non-regression test for bug 15146 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15146
+//
+// <-- Short Description -->
+// lasterror() crashes Scilab when last error message is empty
+
+execstr("error("""")", "errcatch");
+assert_checkequal(lasterror(), "");