*Bug #13331 fixed - Users are no longer able to write inconsistent options
[scilab.git] / scilab / modules / fileio / src / c / mopen.c
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;