laruence                                 Tue, 13 Sep 2011 12:44:13 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=316618

Log:
Fixed Bug #55674 (fgetcsv & str_getcsv skip empty fields in some tab-separated 
records) which was introduced by r311543

Bug: https://bugs.php.net/55674 (Open) fgetcsv & str_getcsv skip empty fields 
in some tab-separated records
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/standard/file.c
    A   php/php-src/branches/PHP_5_3/ext/standard/tests/strings/bug55674.phpt
    U   php/php-src/branches/PHP_5_4/ext/standard/file.c
    A   php/php-src/branches/PHP_5_4/ext/standard/tests/strings/bug55674.phpt
    U   php/php-src/trunk/ext/standard/file.c
    A   php/php-src/trunk/ext/standard/tests/strings/bug55674.phpt

Modified: php/php-src/branches/PHP_5_3/ext/standard/file.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/file.c    2011-09-13 12:42:17 UTC 
(rev 316617)
+++ php/php-src/branches/PHP_5_3/ext/standard/file.c    2011-09-13 12:44:13 UTC 
(rev 316618)
@@ -2199,7 +2199,7 @@
                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) {

Added: php/php-src/branches/PHP_5_3/ext/standard/tests/strings/bug55674.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/tests/strings/bug55674.phpt       
                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/standard/tests/strings/bug55674.phpt       
2011-09-13 12:44:13 UTC (rev 316618)
@@ -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) " "
+}

Modified: php/php-src/branches/PHP_5_4/ext/standard/file.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/standard/file.c    2011-09-13 12:42:17 UTC 
(rev 316617)
+++ php/php-src/branches/PHP_5_4/ext/standard/file.c    2011-09-13 12:44:13 UTC 
(rev 316618)
@@ -2051,7 +2051,7 @@
                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) {

Added: php/php-src/branches/PHP_5_4/ext/standard/tests/strings/bug55674.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/standard/tests/strings/bug55674.phpt       
                        (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/standard/tests/strings/bug55674.phpt       
2011-09-13 12:44:13 UTC (rev 316618)
@@ -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) " "
+}

Modified: php/php-src/trunk/ext/standard/file.c
===================================================================
--- php/php-src/trunk/ext/standard/file.c       2011-09-13 12:42:17 UTC (rev 
316617)
+++ php/php-src/trunk/ext/standard/file.c       2011-09-13 12:44:13 UTC (rev 
316618)
@@ -2051,7 +2051,7 @@
                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) {

Added: php/php-src/trunk/ext/standard/tests/strings/bug55674.phpt
===================================================================
--- php/php-src/trunk/ext/standard/tests/strings/bug55674.phpt                  
        (rev 0)
+++ php/php-src/trunk/ext/standard/tests/strings/bug55674.phpt  2011-09-13 
12:44:13 UTC (rev 316618)
@@ -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) " "
+}

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to