bug 13981: fix string corruption in error cases 45/16845/2
Antoine ELIAS [Wed, 15 Jul 2015 14:00:58 +0000 (16:00 +0200)]
Change-Id: I8a84503ea3849e63e331ca3b317cba22a3c27bb7

scilab/modules/hdf5/sci_gateway/cpp/sci_hdf5_load.cpp
scilab/modules/io/sci_gateway/cpp/sci_lib.cpp
scilab/modules/io/src/cpp/loadlib.cpp
scilab/modules/io/tests/nonreg_tests/bug_13981.dia.ref [new file with mode: 0644]
scilab/modules/io/tests/nonreg_tests/bug_13981.tst [new file with mode: 0644]

index 96cd67b..6d56996 100644 (file)
@@ -70,7 +70,7 @@ Function::ReturnValue sci_hdf5_load(typed_list &in, int _iRetCount, typed_list&
         switch (err)
         {
             case 1:
-                Scierror(999, _("%s: %s is not a valid module file.\n"), fname.data(), filename.data());
+                Scierror(999, _("%s: %s is not a valid lib file.\n"), fname.data(), filename.data());
                 return Function::Error;
             case 2:
                 Scierror(999, "%s: %s", fname.data(), _("Redefining permanent variable.\n"));
index 0963c8b..2788ae0 100644 (file)
@@ -65,9 +65,9 @@ Function::ReturnValue sci_lib(types::typed_list &in, int _iRetCount, types::type
             break;
         case 1:
         {
-            char* pstPath = wide_string_to_UTF8(pwstPath);
-            Scierror(999, _("%s: %s is not a valid module file.\n"), "lib", pstPath);
-            FREE(pstPath);
+            char* pst = wide_string_to_UTF8(pstPath);
+            Scierror(999, _("%s: %s is not a valid lib path.\n"), "lib", pst);
+            FREE(pst);
             return Function::Error;
         }
         case 2:
index c8fad8a..5aa73ee 100644 (file)
@@ -17,6 +17,7 @@
 
 extern "C"
 {
+#include "FileExist.h"
 #include "sci_malloc.h"
 #include "os_string.h"
 #include "expandPathVariable.h"
@@ -58,6 +59,14 @@ types::Library* loadlib(const std::wstring& _wstXML, int* err, bool _isFile, boo
     }
 
     char* pstFile = wide_string_to_UTF8(wstFile.c_str());
+
+    if (FileExist(pstFile) == FALSE)
+    {
+        *err = 1;
+        FREE(pstFile);
+        return NULL;
+    }
+
     char *encoding = GetXmlFileEncoding(pstFile);
 
     /* Don't care about line return / empty line */
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_13981.dia.ref b/scilab/modules/io/tests/nonreg_tests/bug_13981.dia.ref
new file mode 100644 (file)
index 0000000..e9185a0
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- ENGLISH IMPOSED -->
+//
+// <-- Non-regression test for bug 13981 -->
+//
+// <-- Short Description -->
+// lib(path) corrupts the first on error
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13981
+//
+path = "SCI/test";
+refMsg = msprintf(_("%s: %s is not a valid lib path.\n"), "lib", path);
+assert_checkerror("lib(path)", refMsg);
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_13981.tst b/scilab/modules/io/tests/nonreg_tests/bug_13981.tst
new file mode 100644 (file)
index 0000000..4fb000c
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- ENGLISH IMPOSED -->
+//
+// <-- Non-regression test for bug 13981 -->
+//
+// <-- Short Description -->
+// lib(path) corrupts the first on error
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13981
+//
+
+path = "SCI/test";
+refMsg = msprintf(_("%s: %s is not a valid lib path.\n"), "lib", path);
+assert_checkerror("lib(path)", refMsg);