iliaa Sun Feb 23 22:13:25 2003 EDT
Added files:
/php4/ext/standard/tests/file bug22382.phpt test2.csv
Modified files:
/php4/ext/standard file.c
Log:
Fixed bug #22382 (fgetcsv did not handle \" correctly).
Index: php4/ext/standard/file.c
diff -u php4/ext/standard/file.c:1.309 php4/ext/standard/file.c:1.310
--- php4/ext/standard/file.c:1.309 Sat Feb 22 15:35:22 2003
+++ php4/ext/standard/file.c Sun Feb 23 22:13:25 2003
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: file.c,v 1.309 2003/02/22 20:35:22 iliaa Exp $ */
+/* $Id: file.c,v 1.310 2003/02/24 03:13:25 iliaa Exp $ */
/* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
@@ -2558,6 +2558,21 @@
/* 2A. handle enclosure delimited field */
while (*bptr) {
+ /* we need to determine if the enclosure is 'real' or
is it escaped */
+ if (*(bptr - 1) == '\\') {
+ int escape_cnt = 0;
+ char *bptr_p = bptr - 2;
+
+ while (bptr_p > buf && *bptr_p == '\\') {
+ escape_cnt++;
+ bptr_p--;
+ }
+ if (!(escape_cnt % 2)) {
+ goto normal_char;
+ continue;
+ }
+ }
+
if (*bptr == enclosure) {
/* handle the enclosure */
if ( *(bptr+1) == enclosure) {
@@ -2571,6 +2586,7 @@
break; /* .. from handling this field
- resumes at 3. */
}
} else {
+normal_char:
/* normal character */
*tptr++ = *bptr++;
Index: php4/ext/standard/tests/file/bug22382.phpt
+++ php4/ext/standard/tests/file/bug22382.phpt
--TEST--
Bug #22382: fgetcvs does not handle escaped quotes correctly
--POST--
--GET--
--FILE--
<?php
$fp = fopen(dirname(__FILE__)."/test2.csv", "r");
while(($line = fgetcsv($fp, 1024))) {
var_dump($line);
}
fclose($fp);
?>
--EXPECT--
array(6) {
[0]=>
string(3) "One"
[1]=>
string(7) "\"Two\""
[2]=>
string(7) "Three\""
[3]=>
string(4) "Four"
[4]=>
string(2) "\\"
[5]=>
string(28) "\\\\\\\\\\\\\\\\\\\\\\\"\\\\"
}
Index: php4/ext/standard/tests/file/test2.csv
+++ php4/ext/standard/tests/file/test2.csv
"One","\"Two\"","Three\"","Four","\\","\\\\\\\\\\\\\\\\\\\\\\\"\\\\"
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php