* Bug #14111 fixed - modified lib function to detect Scilab version 5 libraries and... 39/17939/3
rishubhjain [Wed, 16 Mar 2016 16:56:04 +0000 (09:56 -0700)]
Change-Id: Ia75088c5fb5bbdc45c2384f2f289d7c21d49d9d9

scilab/CHANGES
scilab/modules/io/sci_gateway/cpp/sci_lib.cpp
scilab/modules/io/src/cpp/loadlib.cpp
scilab/modules/io/tests/nonreg_tests/bug_14111.dia.ref [new file with mode: 0644]
scilab/modules/io/tests/nonreg_tests/bug_14111.tst [new file with mode: 0644]
scilab/modules/io/tests/nonreg_tests/lib [new file with mode: 0644]

index 339a279..f5892d6 100644 (file)
@@ -339,6 +339,8 @@ In 6.0.0:
 
 * Bug #14099 fixed - sci2exp macro was fixed to avoid "a+[] Warning"
 
+* Bug #14111 fixed - modified lib function to detect Scilab version 5 libraries and give proper error messages.
+
 * Bug #14271 fixed - conjgrad() displayed an incorrect error message about number of arguments.
 
 * Bug #14347 fixed - plot2d crashed with multiple entries (non regression test).
@@ -740,4 +742,4 @@ In 6.0.0 alpha-2 and earlier:
                      exactly "pvApyCtx" when macros are used in a gateway.
 
 * Bug #14044 fixed - MALLOC.h is now renamed to sci_malloc.h.
+
index 7e1f98e..3282383 100644 (file)
@@ -28,9 +28,8 @@ extern "C"
 }
 
 /*--------------------------------------------------------------------------*/
-types::Function::ReturnValue sci_lib(types::typed_list &in, int _iRetCount, types::typed_list &out)
+types::Function::ReturnValue sci_lib(types::typed_list &in, int /*_iRetCount*/, types::typed_list &out)
 {
-    int iXMLFileLen = 0;
     if (in.size() != 1)
     {
         Scierror(78, _("%s: Wrong number of input argument(s): %d expected.\n"), "lib", 1);
@@ -76,6 +75,16 @@ types::Function::ReturnValue sci_lib(types::typed_list &in, int _iRetCount, type
             Scierror(999, "%s: %s", "lib", _("Redefining permanent variable.\n"));
             return types::Function::Error;
         }
+        case 3:
+        {
+            Scierror(999, "%s: %s", "lib", _("Cannot read lib file: Not in proper XML format.\n"));
+            return types::Function::Error;
+        }
+        case 4:
+        {
+            Scierror(999, "%s: %s", "lib", _("Old binary lib detected. Please recompile it for Scilab 6.\n"));
+            return types::Function::Error;
+        }
         default:
         {
             //nothing
index efca155..57cad00 100644 (file)
  * along with this program.
 *
 */
-
+#include <fstream>
 #include "configvariable.hxx"
 #include "context.hxx"
 #include "loadlib.hxx"
 #include "macrofile.hxx"
-
 extern "C"
 {
 #include "FileExist.h"
@@ -120,6 +119,19 @@ int parseLibFile(const std::wstring& _wstXML, MacroInfoList& info, std::wstring&
         FREE(pstFile);
         return 1;
     }
+    std::string s(_wstXML.begin(),_wstXML.end());
+    std::ifstream file(s);
+    if (file)
+    {
+        const std::string XMLDecl("<?xml");
+        std::string readXMLDecl;
+        readXMLDecl.resize(XMLDecl.length(),' ');//reserve space
+        file.read(&*readXMLDecl.begin(),XMLDecl.length());
+        if (XMLDecl != readXMLDecl)
+        {
+          return 4;
+        }
+    }
 
     char *encoding = GetXmlFileEncoding(pstFile);
 
@@ -130,7 +142,7 @@ int parseLibFile(const std::wstring& _wstXML, MacroInfoList& info, std::wstring&
     {
         FREE(pstFile);
         free(encoding);
-        return NULL;
+        return 3;
     }
 
     xmlDocPtr doc;
@@ -148,7 +160,7 @@ int parseLibFile(const std::wstring& _wstXML, MacroInfoList& info, std::wstring&
     if (doc == NULL)
     {
         FREE(pstFile);
-        return 1;
+        return 3;
     }
 
     FREE(pstFile);
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_14111.dia.ref b/scilab/modules/io/tests/nonreg_tests/bug_14111.dia.ref
new file mode 100644 (file)
index 0000000..259604c
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Rishubh Jain
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- ENGLISH IMPOSED -->
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14111 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14111
+//
+// <-- Short Description -->
+//
+// lib() did not produce correct error message on detecting Old binary lib file
+assert_checkerror("lib(""SCI/modules/io/tests/."")","lib: SCI/modules/io/tests/. is not a valid lib path.");
+assert_checkerror("lib(""SCI/modules/io/tests/nonreg_tests/"")","lib: Old binary lib detected. Please recompile it for Scilab 6.");
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_14111.tst b/scilab/modules/io/tests/nonreg_tests/bug_14111.tst
new file mode 100644 (file)
index 0000000..3c5458d
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Rishubh Jain
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- ENGLISH IMPOSED -->
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14111 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14111
+//
+// <-- Short Description -->
+//
+// lib() did not produce correct error message on detecting Old binary lib file
+
+
+assert_checkerror("lib(""SCI/modules/io/tests/."")","lib: SCI/modules/io/tests/. is not a valid lib path.");
+
+assert_checkerror("lib(""SCI/modules/io/tests/nonreg_tests/"")","lib: Old binary lib detected. Please recompile it for Scilab 6.");
+
+
+
diff --git a/scilab/modules/io/tests/nonreg_tests/lib b/scilab/modules/io/tests/nonreg_tests/lib
new file mode 100644 (file)
index 0000000..c211999
Binary files /dev/null and b/scilab/modules/io/tests/nonreg_tests/lib differ