Fixed bug #53848 (fgetcsv() ignores spaces at beginnings of fields).

This commit is contained in:
Ilia Alshanetsky 2011-05-29 10:23:06 +00:00
parent ef74038d1d
commit 69a12bfb3f
3 changed files with 34 additions and 21 deletions

1
NEWS
View File

@ -44,6 +44,7 @@ PHP NEWS
. Fixed bug #54866 (incorrect accounting for realpath_cache_size) (Dustin Ward)
. Fixed bug #54721 (Different Hashes on Windows, BSD and Linux on wrong Salt size)
(Pierre, os at irj dot ru)
. Fixed bug #53848 (fgetcsv() ignores spaces at beginnings of fields). (Ilia)
. Fixed bug #50363 (Invalid parsing in convert.quoted-printable-decode filter).
(slusarz at curecanti dot org)
. Fixed bug #48465 (sys_get_temp_dir() possibly inconsistent when using

View File

@ -2196,30 +2196,17 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, char
char *comp_end, *hunk_begin;
tptr = temp;
/* 1. Strip any leading space */
for (;;) {
inc_len = (bptr < limit ? (*bptr == '\0' ? 1: php_mblen(bptr, limit - bptr)): 0);
switch (inc_len) {
case -2:
case -1:
inc_len = 1;
php_mblen(NULL, 0);
break;
case 0:
goto quit_loop_1;
case 1:
if (!isspace((int)*(unsigned char *)bptr) || *bptr == delimiter) {
goto quit_loop_1;
}
break;
default:
goto quit_loop_1;
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)) {
tmp++;
}
if (*tmp == enclosure) {
bptr = tmp;
}
bptr += inc_len;
}
quit_loop_1:
if (first_field && bptr == line_end) {
add_next_index_null(return_value);
break;

View File

@ -0,0 +1,25 @@
--TEST--
Bug #53848 (fgetcsv removes leading spaces from fields)
--FILE--
<?php
$file = dirname(__FILE__) . "/bug39538.csv";
@unlink($file);
file_put_contents($file, "a,b\n c, d");
$fp = fopen($file, "r");
while ($l = fgetcsv($fp)) var_dump($l);
fclose($fp);
@unlink($file);
?>
--EXPECT--
array(2) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
}
array(2) {
[0]=>
string(3) " c"
[1]=>
string(3) " d"
}