]> granicus.if.org Git - php/commitdiff
Fixed bug #26634 & added test case.
authorIlia Alshanetsky <iliaa@php.net>
Mon, 15 Dec 2003 18:53:26 +0000 (18:53 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Mon, 15 Dec 2003 18:53:26 +0000 (18:53 +0000)
ext/standard/file.c
ext/standard/tests/file/bug26634.phpt [new file with mode: 0644]
ext/standard/tests/file/test4.csv [new file with mode: 0644]

index 4ee1e5b84b3cfe7e6882cc90e9a7317ebd4ac324..e1f88e675b7078a2b09c668fbee92ee8478b80a6 100644 (file)
@@ -2266,16 +2266,17 @@ PHP_FUNCTION(fgetcsv)
 
        array_init(return_value);
 
-#define CSV_ADD_ENTRY(s, es, st)       {       \
-       int len = es - st;      \
-       if (len) {      \
-               while (isspace((int)*(unsigned char *)s)) {     \
-                       s++;    \
-                       len--;  \
+#define CSV_ADD_ENTRY(os, es, st)      {       \
+       int tmp_sl = es - st;   \
+       char *tmp_s=os; \
+       if (tmp_sl) {   \
+               while (isspace((int)*(unsigned char *)tmp_s)) { \
+                       tmp_s++;        \
+                       tmp_sl--;       \
                }       \
        }       \
-       if (len) {      \
-               add_next_index_stringl(return_value, s, len, 1);        \
+       if (tmp_sl) {   \
+               add_next_index_stringl(return_value, tmp_s, tmp_sl, 1); \
        } else {        \
                add_next_index_string(return_value, "", 1);     \
        }       \
diff --git a/ext/standard/tests/file/bug26634.phpt b/ext/standard/tests/file/bug26634.phpt
new file mode 100644 (file)
index 0000000..b9a46db
--- /dev/null
@@ -0,0 +1,32 @@
+--TEST--
+Bug #26634 (fgetcsv() incorrect handling of multiline entries with backslashes)
+--FILE--
+<?php
+$fp = fopen(dirname(__FILE__).'/test4.csv', 'r');
+while ($row = fgetcsv($fp, 4096, "\t")) {
+       print_r($row);
+}
+?>
+--EXPECT--
+Array
+(
+    [0] => 
+    [1] => 
+    [2] => 971221
+    [3] => 1
+)
+Array
+(
+    [0] => 
+    [1] => 
+    [2] => 950707
+    [3] => \\
+\\
+)
+Array
+(
+    [0] => 
+    [1] => 
+    [2] => 999637
+    [3] => ERYC 250
+)
diff --git a/ext/standard/tests/file/test4.csv b/ext/standard/tests/file/test4.csv
new file mode 100644 (file)
index 0000000..8b71b8d
--- /dev/null
@@ -0,0 +1,4 @@
+" "    ""      "971221"        "1"
+" "    ""      "950707"        "\\
+\\"
+" "    ""      "999637"        "ERYC 250"