Fix Crash when writing on stdin 14/12314/4
Bruno JOFRET [Wed, 21 Aug 2013 09:19:30 +0000 (11:19 +0200)]
test_run("output_stream",["print","write"])

Change-Id: If6ebe374207c7c401ed2db92e5ed254f1926e641

scilab/modules/output_stream/sci_gateway/fortran/intprint.f
scilab/modules/output_stream/tests/unit_tests/print.dia.ref [new file with mode: 0644]
scilab/modules/output_stream/tests/unit_tests/print.tst [new file with mode: 0644]
scilab/modules/output_stream/tests/unit_tests/write.dia.ref [new file with mode: 0644]
scilab/modules/output_stream/tests/unit_tests/write.tst [new file with mode: 0644]

index 9c821bd..4417240 100644 (file)
@@ -1,25 +1,25 @@
 c Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 c Copyright (C) INRIA
 c Copyright (C) ENPC
-c 
+c
 c This file must be used under the terms of the CeCILL.
 c This source file is licensed as described in the file COPYING, which
 c you should have received as part of this distribution.  The terms
-c are also available at    
+c are also available at
 c http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
       subroutine intprint
       INCLUDE 'stack.h'
-c     
+c
       integer top2,tops
       integer mode(2)
       logical opened
       integer iadr
 c
       save opened,lunit
-c     
-c     
+c
+c
       iadr(l)=l+l-1
-c     
+c
       if(rhs.le.1) then
          call error(42)
          return
@@ -37,7 +37,13 @@ c     opening file
       mode(2)=0
       call v2unit(top,mode,lunit,opened,ierr)
       if(ierr.gt.0) return
-c     
+c
+c     try to write on stdin
+      if(lunit.eq.5) then
+         call error(49)
+         return
+      endif
+c
       l = lct(2)
       if(lunit.ne.wte) then
          lct(2) = 0
diff --git a/scilab/modules/output_stream/tests/unit_tests/print.dia.ref b/scilab/modules/output_stream/tests/unit_tests/print.dia.ref
new file mode 100644 (file)
index 0000000..88f7f46
--- /dev/null
@@ -0,0 +1,18 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// stdout
+print(%io(2), "Hello World")
+ Hello World   
+//stdin
+try
+    print(%io(1), "Hello World")
+catch
+    ierr = lasterror();
+    assert_checkequal(ierr, 49);
+end
diff --git a/scilab/modules/output_stream/tests/unit_tests/print.tst b/scilab/modules/output_stream/tests/unit_tests/print.tst
new file mode 100644 (file)
index 0000000..f52290a
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// stdout
+print(%io(2), "Hello World")
+
+//stdin
+try
+    print(%io(1), "Hello World")
+catch
+    ierr = lasterror();
+    assert_checkequal(ierr, 49);
+end
diff --git a/scilab/modules/output_stream/tests/unit_tests/write.dia.ref b/scilab/modules/output_stream/tests/unit_tests/write.dia.ref
new file mode 100644 (file)
index 0000000..586a60c
--- /dev/null
@@ -0,0 +1,17 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// stdout
+write(%io(2), "Hello World")
+Hello World
+//stdin
+try
+    write(%io(1), "Hello World")
+catch
+    ierr = lasterror();
+    assert_checkequal(ierr, 49);
+end
diff --git a/scilab/modules/output_stream/tests/unit_tests/write.tst b/scilab/modules/output_stream/tests/unit_tests/write.tst
new file mode 100644 (file)
index 0000000..2024033
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// stdout
+write(%io(2), "Hello World")
+
+//stdin
+try
+    write(%io(1), "Hello World")
+catch
+    ierr = lasterror();
+    assert_checkequal(ierr, 49);
+end