*Bug #13331 fixed - Users are no longer able to write inconsistent options 31/14431/16
Sylvain GENIN [Thu, 17 Apr 2014 12:50:48 +0000 (14:50 +0200)]
to mopen, mopen(file, "wr") exits now with a proper error.

Change-Id: I36ea45d6b80d4a9a33c607451873c4aa1f3998a4

scilab/CHANGES_5.5.X
scilab/modules/fileio/src/c/mopen.c
scilab/modules/fileio/tests/nonreg_tests/bug_13331.dia.ref [new file with mode: 0644]
scilab/modules/fileio/tests/nonreg_tests/bug_13331.tst [new file with mode: 0644]

index ed0f882..af1e609 100644 (file)
@@ -16,6 +16,9 @@ Scilab Bug Fixes
 * Bug #13313 fixed - Setting datatips orientation did not disable
                      auto_orientation mode.
 
+* Bug #13331 fixed - Users are no longer able to write inconsistent options to mopen,
+                     mopen(file, "wr") now exits with a proper error.
+
 * Bug #13333 fixed - Selecting "Offline mode" in Scilab installer installed
                      Scilab in "Command line mode" (without GUI modules).
 
index 9c4a976..1305143 100644 (file)
@@ -30,8 +30,9 @@ extern int swap;
 /*--------------------------------------------------------------------------*/
 void C2F(mopen)(int *fd, char *file, char *status, int *f_swap, double *res, int *error)
 {
-    int        littlendian = 1, type = 2, ierr, mode;
-    char       *endptr;
+    int littlendian = 1, type = 2, ierr, mode;
+    int lenChar = 0, testRep = 1;
+    char *endptr;
     FILE * fa;
 
     /* bug 4846 */
@@ -81,7 +82,9 @@ void C2F(mopen)(int *fd, char *file, char *status, int *f_swap, double *res, int
         return;
     }
 
-    if (strlen(status) == 0)
+    //#Bug 13331 //
+    lenChar = (int)strlen(status);
+    if (( lenChar == 0 ) || ( lenChar > 3 ))
     {
         *error = (int)MOPEN_INVALID_STATUS;
         return;
@@ -93,6 +96,15 @@ void C2F(mopen)(int *fd, char *file, char *status, int *f_swap, double *res, int
         return;
     }
 
+    for ( testRep = 1; testRep < lenChar ; testRep++ )
+    {
+        if (( status[testRep] != '+' ) && ( status[testRep] != 'b' ) && ( status[testRep] != 't' ))
+        {
+            *error = (int)MOPEN_INVALID_STATUS;
+            return;
+        }
+    }
+
     if (isdir(file))
     {
         *error = (int)MOPEN_CAN_NOT_OPEN_FILE;
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_13331.dia.ref b/scilab/modules/fileio/tests/nonreg_tests/bug_13331.dia.ref
new file mode 100644 (file)
index 0000000..de4ffe1
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Sylvain GENIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13331 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13331
+//
+// <-- Short Description -->
+// Users are no longer able to write inconsistent options to mopen,
+//   mopen(file, "wr") exits now with a proper error
+refMsg = msprintf(_("%s: invalid status.\n"), "mopen");
+assert_checkerror("mopen(""texte.txt"", ""rw"")",refMsg);
+assert_checkerror("mopen(""texte.txt"", ""r+w"")",refMsg);
+assert_checkerror("mopen(""texte.txt"", ""r="")",refMsg);
+assert_checkerror("mopen(""texte.txt"", ""L"")",refMsg);
+assert_checkerror("mopen(""texte.txt"", ""w+lb"")",refMsg);
diff --git a/scilab/modules/fileio/tests/nonreg_tests/bug_13331.tst b/scilab/modules/fileio/tests/nonreg_tests/bug_13331.tst
new file mode 100644 (file)
index 0000000..2cfae75
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Sylvain GENIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 13331 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13331
+//
+// <-- Short Description -->
+// Users are no longer able to write inconsistent options to mopen,
+//   mopen(file, "wr") exits now with a proper error
+
+refMsg = msprintf(_("%s: invalid status.\n"), "mopen");
+
+assert_checkerror("mopen(""texte.txt"", ""rw"")",refMsg);
+
+assert_checkerror("mopen(""texte.txt"", ""r+w"")",refMsg);
+
+assert_checkerror("mopen(""texte.txt"", ""r="")",refMsg);
+
+assert_checkerror("mopen(""texte.txt"", ""L"")",refMsg);
+
+assert_checkerror("mopen(""texte.txt"", ""w+lb"")",refMsg);
+