Skip to content

Commit ee709c5

Browse files
author
Julien Pauli
committed
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: Updated NEWS Fixed #68479 - Added escape parameter to SplFileObject::fputcsv
2 parents 6cf5ac7 + 1e40b0a commit ee709c5

File tree

3 files changed

+50
-6
lines changed

3 files changed

+50
-6
lines changed

ext/spl/spl_directory.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2643,19 +2643,26 @@ SPL_METHOD(SplFileObject, fgetcsv)
26432643
}
26442644
/* }}} */
26452645

2646-
/* {{{ proto int SplFileObject::fputcsv(array fields, [string delimiter [, string enclosure]])
2646+
/* {{{ proto int SplFileObject::fputcsv(array fields, [string delimiter [, string enclosure [, string escape]]])
26472647
Output a field array as a CSV line */
26482648
SPL_METHOD(SplFileObject, fputcsv)
26492649
{
26502650
spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
26512651
char delimiter = intern->u.file.delimiter, enclosure = intern->u.file.enclosure, escape = intern->u.file.escape;
2652-
char *delim = NULL, *enclo = NULL;
2653-
int d_len = 0, e_len = 0, ret;
2652+
char *delim = NULL, *enclo = NULL, *esc = NULL;
2653+
int d_len = 0, e_len = 0, esc_len = 0, ret;
26542654
zval *fields = NULL;
26552655

2656-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|ss", &fields, &delim, &d_len, &enclo, &e_len) == SUCCESS) {
2656+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|sss", &fields, &delim, &d_len, &enclo, &e_len, &esc, &esc_len) == SUCCESS) {
26572657
switch(ZEND_NUM_ARGS())
26582658
{
2659+
case 4:
2660+
if (esc_len != 1) {
2661+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "escape must be a character");
2662+
RETURN_FALSE;
2663+
}
2664+
escape = esc[0];
2665+
/* no break */
26592666
case 3:
26602667
if (e_len != 1) {
26612668
php_error_docref(NULL TSRMLS_CC, E_WARNING, "enclosure must be a character");
@@ -3030,6 +3037,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fputcsv, 0, 0, 1)
30303037
ZEND_ARG_INFO(0, fields)
30313038
ZEND_ARG_INFO(0, delimiter)
30323039
ZEND_ARG_INFO(0, enclosure)
3040+
ZEND_ARG_INFO(0, escape)
30333041
ZEND_END_ARG_INFO()
30343042

30353043
ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_flock, 0, 0, 1)

ext/spl/tests/SplFileObject_fputcsv_error.phpt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ echo "-- Testing fputcsv() with more than expected number of arguments --\n";
1414
$fields = array("fld1", "fld2");
1515
$delim = ";";
1616
$enclosure ="\"";
17-
var_dump( $fo->fputcsv($fields, $delim, $enclosure, $fo) );
17+
$escape = "\\";
18+
var_dump( $fo->fputcsv($fields, $delim, $enclosure, $escape, $fo) );
1819

1920
echo "Done\n";
2021
--CLEAN--
@@ -30,6 +31,6 @@ Warning: SplFileObject::fputcsv() expects at least 1 parameter, 0 given in %s on
3031
NULL
3132
-- Testing fputcsv() with more than expected number of arguments --
3233

33-
Warning: SplFileObject::fputcsv() expects at most 3 parameters, 4 given in %s on line %d
34+
Warning: SplFileObject::fputcsv() expects at most 4 parameters, 5 given in %s on line %d
3435
NULL
3536
Done

ext/spl/tests/bug68479.phpt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
--TEST--
2+
Bug #68479 (Escape parameter missing from SplFileObject::fputcsv)
3+
--FILE--
4+
<?php
5+
6+
$method = new ReflectionMethod('SplFileObject', 'fputcsv');
7+
$params = $method->getParameters();
8+
var_dump($params);
9+
10+
?>
11+
===DONE===
12+
--EXPECTF--
13+
array(4) {
14+
[0]=>
15+
&object(ReflectionParameter)#2 (1) {
16+
["name"]=>
17+
string(6) "fields"
18+
}
19+
[1]=>
20+
&object(ReflectionParameter)#3 (1) {
21+
["name"]=>
22+
string(9) "delimiter"
23+
}
24+
[2]=>
25+
&object(ReflectionParameter)#4 (1) {
26+
["name"]=>
27+
string(9) "enclosure"
28+
}
29+
[3]=>
30+
&object(ReflectionParameter)#5 (1) {
31+
["name"]=>
32+
string(6) "escape"
33+
}
34+
}
35+
===DONE===

0 commit comments

Comments
 (0)