bug 11976: Check csvTextScan 3rd parameter validity 69/9769/2
Antoine ELIAS [Thu, 22 Nov 2012 11:14:43 +0000 (12:14 +0100)]
Change-Id: If707749bc75e82ccf32b858725e83bfb0050fbaf

scilab/CHANGES_5.4.X
scilab/modules/spreadsheet/sci_gateway/c/sci_csvTextScan.c
scilab/modules/spreadsheet/tests/nonreg_tests/bug_11976.dia.ref [new file with mode: 0644]
scilab/modules/spreadsheet/tests/nonreg_tests/bug_11976.tst [new file with mode: 0644]
scilab/modules/spreadsheet/tests/nonreg_tests/bug_11999.dia.ref

index c451550..5297bd7 100644 (file)
@@ -82,6 +82,7 @@ Bug fixes
 * Bug #11971 fixed - Canceling "Open File" action launched from icon in the
                     toolbar opened SciNotes anyway.
 
+* Bug #11976 fixed - Check csvTextScan 3rd parameter validity.
 
 * Bug #11981 fixed - Smooth french help page had a wrong declaration
                      (colonnes => lignes).
index 5cb1df4..32750b8 100644 (file)
@@ -161,6 +161,23 @@ int sci_csvTextScan(char *fname, unsigned long fname_len)
             }
             return 0;
         }
+
+        if (decimal[0] != '.' && decimal[0] != ',')
+        {
+            if (iRange)
+            {
+                FREE(iRange);
+                iRange = NULL;
+            }
+            if (conversion)
+            {
+                FREE(conversion);
+                conversion = NULL;
+            }
+
+            Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' string expected.\n"), fname, 3, ",", ".");
+            return 0;
+        }
     }
     else
     {
diff --git a/scilab/modules/spreadsheet/tests/nonreg_tests/bug_11976.dia.ref b/scilab/modules/spreadsheet/tests/nonreg_tests/bug_11976.dia.ref
new file mode 100644 (file)
index 0000000..0900109
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 11976 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=11976
+//
+// <-- Short Description -->
+// decimal parameter must be '.' or ','
+//
+some_data = ["67200.99976"];
+iErr = execstr("data_time = csvTextScan(some_data, ""."", """", ""double"")", "errcatch");
+assert_checktrue(iErr <> 0);
+data_time = csvTextScan(some_data, ".", ",", "double");
diff --git a/scilab/modules/spreadsheet/tests/nonreg_tests/bug_11976.tst b/scilab/modules/spreadsheet/tests/nonreg_tests/bug_11976.tst
new file mode 100644 (file)
index 0000000..c4cbdff
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - Scilab Enterprises - Antoine ELIAS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 11976 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=11976
+//
+// <-- Short Description -->
+// decimal parameter must be '.' or ','
+//
+
+some_data = ["67200.99976"];
+iErr = execstr("data_time = csvTextScan(some_data, ""."", """", ""double"")", "errcatch");
+assert_checktrue(iErr <> 0);
+data_time = csvTextScan(some_data, ".", ",", "double");
index 36975d9..bf71925 100644 (file)
@@ -18,7 +18,7 @@
 filename=SCI+"/modules/spreadsheet/" + "tests/nonreg_tests/bug_11999.csv";
 csvDefault("blank","off"); // Default behavior in 5.4.0, changed 5.4.1 to "on"
 assert_checkerror ("a=csvRead(filename,"";"",[],""string"");", [] , 999 );
-csvRead: Unconsistency found in the columns. At line 2, found 0 columns while the previous had 3.
+csvRead: Inconsistency found in the columns. At line 2, found 0 columns while the previous had 3.
 csvDefault("blank","on");
 a=csvRead(filename,";",[],"string");
 assert_checkequal(a,["foo","bar","foo";"foo2","bar2","bar3"]);