com php-src: Revert "Update fputcsv() to escape all characters equally.": ext/standard/file.c ext/standard/tests/file/fputcsv.phpt
ext/standard/tests/file/fputcsv_bug43225.phpt
| From: | Adam Harvey | Date: | Tue, 15 Jan 2013 09:40:30 +0000 |
| Subject: | com php-src: Revert "Update fputcsv() to escape all characters equally.": ext/standard/file.c ext/standard/tests/file/fputcsv.phpt ext/standard/tests/file/fputcsv_bug43225.phpt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-70973@lists.php.net to get a copy of this message | ||
Commit: cab290d2adbd616a18b9efaace6abe629f827190
Author: Adam Harvey <aharvey@php.net> Tue, 15 Jan 2013 17:33:54 +0800
Parents: dc495bbe95680a9cf2321da83a382d834d70758c
Branches: PHP-5.5
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=cab290d2adbd616a18b9efaace6abe629f827190
Log:
Revert "Update fputcsv() to escape all characters equally."
On second thoughts, while the behaviour _is_ broken, this isn't the right fix.
This reverts commit 9b5cb0e8059b1e8bec096067491ed8d75f878938.
Changed paths:
M ext/standard/file.c
M ext/standard/tests/file/fputcsv.phpt
D ext/standard/tests/file/fputcsv_bug43225.phpt
Diff:
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 574fb53..74577ac 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -1871,16 +1871,20 @@ PHPAPI int php_fputcsv(php_stream *stream, zval *fields, char delimiter,
char en
FPUTCSV_FLD_CHK('\n') ||
FPUTCSV_FLD_CHK('\r') ||
FPUTCSV_FLD_CHK('\t') ||
- FPUTCSV_FLD_CHK('\\') ||
FPUTCSV_FLD_CHK(' ')
) {
char *ch = Z_STRVAL(field);
char *end = ch + Z_STRLEN(field);
+ int escaped = 0;
smart_str_appendc(&csvline, enclosure);
while (ch < end) {
- if (*ch == enclosure) {
+ if (*ch == escape_char) {
+ escaped = 1;
+ } else if (!escaped && *ch == enclosure) {
smart_str_appendc(&csvline, enclosure);
+ } else {
+ escaped = 0;
}
smart_str_appendc(&csvline, *ch);
ch++;
diff --git a/ext/standard/tests/file/fputcsv.phpt b/ext/standard/tests/file/fputcsv.phpt
index d71f777..63c4150 100644
--- a/ext/standard/tests/file/fputcsv.phpt
+++ b/ext/standard/tests/file/fputcsv.phpt
@@ -44,7 +44,7 @@ echo '$list = ';var_export($res);echo ";\n";
$fp = fopen($file, "r");
$res = array();
-while($l=fgetcsv($fp, 0, ',', '"', '"'))
+while($l=fgetcsv($fp))
{
$res[] = join(',',$l);
}
@@ -75,10 +75,10 @@ $list = array (
13 => 'aaa,"""bbb """',
14 =>
'"aaa""aaa""","""bbb""bbb"',
15 => '"aaa""aaa""""""",bbb',
- 16 => 'aaa,"""\\""bbb",ccc',
- 17 =>
'"aaa""\\""a""","""bbb"""',
- 18 =>
'"""\\""""","""aaa"""',
- 19 => '"""\\""""""",aaa',
+ 16 => 'aaa,"""\\"bbb",ccc',
+ 17 =>
'"aaa""\\"a""","""bbb"""',
+ 18 =>
'"""\\"""","""aaa"""',
+ 19 => '"""\\"""""",aaa',
);
$list = array (
0 => 'aaa,bbb',
diff --git a/ext/standard/tests/file/fputcsv_bug43225.phpt
b/ext/standard/tests/file/fputcsv_bug43225.phpt
deleted file mode 100644
index 1de3b5f..0000000
--- a/ext/standard/tests/file/fputcsv_bug43225.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-fputcsv(): bug #43225 (fputcsv incorrectly handles cells ending in \ followed by ")
---FILE--
-<?php
-
-$row = array(
- 'a\\"',
- 'bbb',
-);
-
-$file = dirname(__FILE__) . 'fgetcsv_bug43225.csv';
-$fp = fopen($file, 'w');
-fputcsv($fp, $row);
-fclose($fp);
-readfile($file);
-unlink($file);
-
-?>
---EXPECT--
-"a\""",bbb