* [Bug #13990](http://bugzilla.scilab.org/show_bug.cgi?id=13990) fixed - `warning... 39/18339/3
Clément DAVID [Fri, 1 Jul 2016 14:57:45 +0000 (16:57 +0200)]
Change-Id: Ibb21444c334912de8243696b0e45442825053590

scilab/CHANGES.md
scilab/modules/core/sci_gateway/cpp/sci_warning.cpp
scilab/modules/core/tests/nonreg_tests/bug_13990.dia.ref [new file with mode: 0644]
scilab/modules/core/tests/nonreg_tests/bug_13990.tst [new file with mode: 0644]
scilab/tools/profiling/valgrind.supp

index efa6489..3f1fb76 100644 (file)
@@ -235,6 +235,7 @@ Bug Fixes
 * [Bug #12110](http://bugzilla.scilab.org/show_bug.cgi?id=12110) fixed - Unable to zoom multiple axes at once
 * [Bug #13597](http://bugzilla.scilab.org/show_bug.cgi?id=13597) fixed - `help format` claimed setting a number of digits instead of characters
 * [Bug #13757](http://bugzilla.scilab.org/show_bug.cgi?id=13757) fixed - The toolbox menu dit not load properly ATOMS modules not autoloaded.
+* [Bug #13990](http://bugzilla.scilab.org/show_bug.cgi?id=13990) fixed - `warning` with localization enabled some memory corruption
 * [Bug #14192](http://bugzilla.scilab.org/show_bug.cgi?id=14192) fixed - `g_margin` error-ed for double integrator.
 * [Bug #14367](http://bugzilla.scilab.org/show_bug.cgi?id=14367) fixed - `edit_curv` failed opening due to a `[]+1` operation.
 * [Bug #14448](http://bugzilla.scilab.org/show_bug.cgi?id=14448) fixed - removed havewindow() was still documented
index cbe8850..20eff3a 100644 (file)
@@ -13,6 +13,8 @@
  *
  */
 
+#include <string>
+
 #include "core_gw.hxx"
 #include "function.hxx"
 #include "string.hxx"
@@ -107,9 +109,13 @@ types::Function::ReturnValue sci_warning(types::typed_list &in, int _iRetCount,
         for (int i = 0; i < psInput->getSize() ; ++i)
         {
             wchar_t* pwstTemp = psInput->get(i);
-            size_t iSize = (wcslen(pwstTemp) + 10 + 1);
+            std::wstring warning = _W("WARNING: %ls\n");
+            size_t iSize = (wcslen(pwstTemp) + warning.size() + 1);
+
             wchar_t* pwstToPrint = (wchar_t*)MALLOC(sizeof(wchar_t) * iSize);
-            os_swprintf(pwstToPrint, iSize, _W("WARNING: %ls\n").c_str(), pwstTemp);
+            os_swprintf(pwstToPrint, iSize, warning.c_str(), pwstTemp);
+            pwstToPrint[iSize - 1] = L'\0';
+
             scilabForcedWriteW(pwstToPrint);
             FREE(pwstToPrint);
         }
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_13990.dia.ref b/scilab/modules/core/tests/nonreg_tests/bug_13990.dia.ref
new file mode 100644 (file)
index 0000000..ebf2034
--- /dev/null
@@ -0,0 +1,10 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Clement David
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+setlanguage ru_RU;
+warning("Test")
+ВНИМАНИЕ: Test
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_13990.tst b/scilab/modules/core/tests/nonreg_tests/bug_13990.tst
new file mode 100644 (file)
index 0000000..441983a
--- /dev/null
@@ -0,0 +1,12 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Clement David
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+//<-- CLI SHELL MODE -->
+
+setlanguage ru_RU;
+warning("Test")
+
index 6c97857..3418759 100644 (file)
@@ -5,6 +5,12 @@
    fun:tgetent
 }
 {
+   scilab-console/tgetent_sp
+   Memcheck:Leak
+   ...
+   fun:tgetent_sp
+}
+{
    scilab-console/tgetnum
    Memcheck:Leak
    ...
    fun:tgetstr
 }
 {
+   scilab-console/tgetstr_sp
+   Memcheck:Leak
+   ...
+   fun:tgetstr_sp
+}
+{
    dynamic-leak/dlerror_run
    Memcheck:Leak
    match-leak-kinds: reachable