* Bug #14636 fixed: read() mis-read empty files 27/19127/2
Clément DAVID [Wed, 22 Feb 2017 14:09:41 +0000 (15:09 +0100)]
Fixed Xcos model with modelica electrical blocks (created in 5.5.2) crashed Scilab 6.

Change-Id: I80c3252d1140c7635d7b43e6082ee6fbcbbe46e5

scilab/CHANGES.md
scilab/modules/io/sci_gateway/cpp/sci_read.cpp
scilab/modules/io/tests/nonreg_tests/bug_14636.tst [new file with mode: 0644]

index 49c604d..990210a 100644 (file)
@@ -341,6 +341,8 @@ strange behaviors or unexpected results do not hesitate to [report](https://bugz
 * Toolboxes rebuild is in progress. Do not hesitate to submit patch or feature upgrade to
 the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 
+### Bugs fixed in 6.0.1:
+* [#14636](http://bugzilla.scilab.org/show_bug.cgi?id=14636): Xcos model with modelica electrical blocks (created in 5.5.2) crashed Scilab 6.
 
 ### Bugs fixed in 6.0.0:
 * [#592](http://bugzilla.scilab.org/show_bug.cgi?id=592): `linspace(a, b, n<=0)` returned `b` instead of `[]`
index 867e40b..971201f 100644 (file)
@@ -340,7 +340,15 @@ types::Function::ReturnValue sci_read(types::typed_list &in, int _iRetCount, typ
 
                         if (error != 2)
                         {
-                            out.push_back(pS);
+                            // on empty file, data are not set
+                            if (pS->get(0) == NULL)
+                            {
+                                out.push_back(types::Double::Empty());
+                            }
+                            else
+                            {
+                                out.push_back(pS);
+                            }
                         }
                         else
                         {
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_14636.tst b/scilab/modules/io/tests/nonreg_tests/bug_14636.tst
new file mode 100644 (file)
index 0000000..ac60f23
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Scilab Enteprises - Clement DAVID
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14636
+//
+// <-- Short Description -->
+// A crash occured after read()-ing an empty file
+
+fd = mopen(TMPDIR+"/empty", "w");
+assert_checkequal(mclose(fd), 0);
+
+l = read(TMPDIR+"/empty",-1,1,"(a)");
+
+deletefile(TMPDIR+"/empty");
+