[bug_14041] genlib fixed about locked file by another program 76/17476/2
Cedric Delamarre [Thu, 19 Nov 2015 14:16:39 +0000 (15:16 +0100)]
Change-Id: I763305e651871ed197309bdd98ab591711b629df

scilab/CHANGES_6.0.X
scilab/modules/io/sci_gateway/cpp/sci_genlib.cpp
scilab/modules/io/tests/nonreg_tests/bug_14041.tst [new file with mode: 0644]

index 5f63bf2..0a2a767 100644 (file)
@@ -19,6 +19,8 @@ For a high-level overview of the changes in this release, please consult the "Wh
 
 * Bug #14178 fixed - tcl/tk unavailability on MacOS is now documented.
 
+* Bug #14041 fixed - genlib crash when the file is locked by another program.
+
 * Bug #14181 fixed - Calling intg (or integrate) in a function that is being integrated failed.
 
 * Bug #14251 fixed - `spec` leaked some memory.
index 66ab66f..19c6346 100644 (file)
@@ -231,6 +231,15 @@ types::Function::ReturnValue sci_genlib(types::typed_list &in, int _iRetCount, t
 
             //compute file md5
             FILE* fmdf5 = os_wfopen(stFullPath.data(), L"rb");
+            if (fmdf5 == NULL)
+            {
+                char* pstr = wide_string_to_UTF8(stFullPath.data());
+                Scierror(999, _("%s: Cannot open file ''%s''.\n"), "genlib", pstr);
+                FREE(pstr);
+                pLib->killMe();
+                return types::Function::Error;
+            }
+
             char* md5 = md5_file(fmdf5);
             fclose(fmdf5);
 
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_14041.tst b/scilab/modules/io/tests/nonreg_tests/bug_14041.tst
new file mode 100644 (file)
index 0000000..2b20d8d
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//<-- CLI SHELL MODE -->
+//<-- INTERACTIVE TEST -->
+// <-- Non-regression test for bug 14041 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14041
+//
+// <-- Short Description -->
+// genlib crashes if one file is a symbolic link created by emacs to lock currently edited file
+
+// create a directory  (ie: dir_genlib)
+// put in this directory a file wich contain the next script
+function genlibtest()
+    disp("genlibtest")
+endfunction
+
+// then open this file (with emacs), modify the function but not save the file
+
+// start scilab
+// go to the path of the created directory
+// execute in scilab
+
+genlib("dir_genlib", "genlibtest", %t ,%t)
+
+// this execution have to return an error : genlib: Cannot open file ''mylib//.#mylib.sci''.
+// instead of crash