]> granicus.if.org Git - php/commitdiff
Fixed Bug #55674 (fgetcsv & str_getcsv skip empty fields in some tab-separated record...
authorXinchen Hui <laruence@php.net>
Tue, 13 Sep 2011 12:44:13 +0000 (12:44 +0000)
committerXinchen Hui <laruence@php.net>
Tue, 13 Sep 2011 12:44:13 +0000 (12:44 +0000)
ext/standard/file.c
ext/standard/tests/strings/bug55674.phpt [new file with mode: 0644]

index 3ef8980f24841ff29274e98c11a9c6dfdd7d2fcc..4240e74e8196d8770390b5eeee23e899ba695cc4 100644 (file)
@@ -2051,7 +2051,7 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, char
                inc_len = (bptr < limit ? (*bptr == '\0' ? 1: php_mblen(bptr, limit - bptr)): 0);
                if (inc_len == 1) {
                        char *tmp = bptr;
-                       while (isspace((int)*(unsigned char *)tmp)) {
+                       while ((*tmp != delimiter) && isspace((int)*(unsigned char *)tmp)) {
                                tmp++;
                        }
                        if (*tmp == enclosure) {
diff --git a/ext/standard/tests/strings/bug55674.phpt b/ext/standard/tests/strings/bug55674.phpt
new file mode 100644 (file)
index 0000000..72ece64
--- /dev/null
@@ -0,0 +1,50 @@
+--TEST--
+Bug #55674 (fgetcsv & str_getcsv skip empty fields in some tab-separated records)
+--FILE--
+<?php
+var_dump(str_getcsv("0\t\t\"2\"\n", "\t"));
+var_dump(str_getcsv("0\t \t'2'\n", "\t", "'"));
+var_dump(str_getcsv(",,,,"));
+var_dump(str_getcsv(" \t  \t\t\t ", "\t"));
+?>
+--EXPECT--
+array(3) {
+  [0]=>
+  string(1) "0"
+  [1]=>
+  string(0) ""
+  [2]=>
+  string(1) "2"
+}
+array(3) {
+  [0]=>
+  string(1) "0"
+  [1]=>
+  string(1) " "
+  [2]=>
+  string(1) "2"
+}
+array(5) {
+  [0]=>
+  string(0) ""
+  [1]=>
+  string(0) ""
+  [2]=>
+  string(0) ""
+  [3]=>
+  string(0) ""
+  [4]=>
+  string(0) ""
+}
+array(5) {
+  [0]=>
+  string(1) " "
+  [1]=>
+  string(2) "  "
+  [2]=>
+  string(0) ""
+  [3]=>
+  string(0) ""
+  [4]=>
+  string(1) " "
+}