* Bug 15539 fixed: now step=0 in int. implicitlist does not crash scilab 65/19965/2
St├ęphane Mottelet [Thu, 19 Apr 2018 14:51:33 +0000 (16:51 +0200)]
http://bugzilla.scilab.org/15539

Change-Id: I4511202933299452c84d9209531c4cab7074b857

scilab/CHANGES.md
scilab/modules/ast/src/cpp/types/implicitlist.cpp
scilab/modules/ast/tests/nonreg_tests/bug_15539.tst [new file with mode: 0644]

index 983af1c..9b051b3 100644 (file)
@@ -403,6 +403,7 @@ Known issues
 * [#15496](http://bugzilla.scilab.org/show_bug.cgi?id=15496): Scinotes `File > Open recent` menu was not updated when it should.
 * [#15499](http://bugzilla.scilab.org/show_bug.cgi?id=15499): Scinotes menus were inactive after session restore under OSX.
 * [#15527](http://bugzilla.scilab.org/show_bug.cgi?id=15527): `ode` gave incorrect results with %ODEOPTIONS(1)=2.
+* [#15539](http://bugzilla.scilab.org/show_bug.cgi?id=15539): zero step in integer implicit list crashed Scilab.
 
 
 ### Bugs fixed in 6.0.1:
index 467283d..bacefb0 100644 (file)
@@ -270,6 +270,12 @@ bool ImplicitList::compute()
                 long long llStep    = convert_input(m_poStep);
                 long long llEnd     = convert_input(m_poEnd);
 
+                // step null
+                if (llStep == 0) // return []
+                {
+                    m_bComputed = true;
+                    return true;
+                }
 #ifdef _MSC_VER
                 m_iSize = static_cast<int>(floor( static_cast<double>(_abs64(llEnd - llStart) / _abs64(llStep)) )) + 1;
 #else
@@ -283,6 +289,12 @@ bool ImplicitList::compute()
                 unsigned long long ullStep     = convert_unsigned_input(m_poStep);
                 unsigned long long ullEnd   = convert_unsigned_input(m_poEnd);
 
+                // step null
+                if (ullStep == 0) // return []
+                {
+                    m_bComputed = true;
+                    return true;
+                }
 #ifdef _MSC_VER
                 m_iSize = static_cast<int>(floor(static_cast<double>(_abs64(ullEnd - ullStart) / _abs64(ullStep)) )) + 1;
 #else
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15539.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15539.tst
new file mode 100644 (file)
index 0000000..42e20b9
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - St├ęphane Mottelet
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15539 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15539
+//
+// <-- Short Description -->
+// Zero step in integer implicit list crashes scilab
+
+assert_checkequal(uint8(0):0:1,[]);