bug #14982 fixed - msprintf segmentation fault removed 55/19155/3
Aashay Singhal [Wed, 8 Mar 2017 20:09:45 +0000 (01:09 +0530)]
Change-Id: I268297852a782ced360f97330493cd9916b280cc

scilab/CHANGES.md
scilab/modules/output_stream/src/cpp/scilab_sprintf.cpp
scilab/modules/output_stream/tests/nonreg_tests/bug_14982.tst [new file with mode: 0644]

index a94e777..0c78fd9 100644 (file)
@@ -67,7 +67,7 @@ Packaging & Supported Operating Systems
 
 Feature changes and additions
 -----------------------------
-
 * Empty strings are used as the default values on String allocation
 
 Help pages:
@@ -109,6 +109,7 @@ Bug Fixes
 * [#14604](http://bugzilla.scilab.org/show_bug.cgi?id=14604): `emptystr()` is 40x slower with 6.0.0 wrt 5.5.2
 * [#14605](http://bugzilla.scilab.org/show_bug.cgi?id=14605): fixed - `bench_run` was too strict about the specification of tests names.
 * [#14812](http://bugzilla.scilab.org/show_bug.cgi?id=14812): Minor typos in messages.
+* [#14982](http://bugzilla.scilab.org/show_bug.cgi?id=14982): `msprintf`segmentation fault was caught due to wrong size
 
 ### Bugs fixed in 6.0.1:
 * [#4276](http://bugzilla.scilab.org/show_bug.cgi?id=4276): `strsubst` replaced the first occurence in regex mode.
index a2c35d2..23d7e82 100644 (file)
@@ -695,6 +695,15 @@ wchar_t** scilab_sprintf(const std::string& funcname, const wchar_t* _pwstInput,
             iStart = i + 1;
             j++;
         }
+        else if ( i == iLen - 1 )
+        {
+            int iSize = i - iStart + 1;
+            pwstOutput[j] = (wchar_t*)MALLOC(sizeof(wchar_t) * (iSize + 1));
+            wcsncpy(pwstOutput[j], pwstFirstOutput + iStart, iSize );
+            pwstOutput[j][iSize] = L'\0';
+            iStart = i + 1;
+            j++;
+        }
     }
 
     if (j == (*_piOutputRows) - 1)
diff --git a/scilab/modules/output_stream/tests/nonreg_tests/bug_14982.tst b/scilab/modules/output_stream/tests/nonreg_tests/bug_14982.tst
new file mode 100644 (file)
index 0000000..7ab564f
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - ESI Group - Clement DAVID
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+
+// <-- Non-regression test for bug 14982 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14982
+//
+// <-- Short Description -->
+// passing incorrect arguments to msprintf (too many data with respect to the
+// format) made Scilab crash
+
+z=[-1.7;-1.7];
+wn=[1;1];
+msprintf(_("Compensator pole\nDamping: %.3g\nNatural pulsation: %.3grd/s"),z,wn)
+