Skip to content

Commit 8efe9f2

Browse files
committed
ext/spl: Fix default argument handling for named parameters in SplFileObject::fgetcsv()
1 parent 2d30506 commit 8efe9f2

4 files changed

Lines changed: 21 additions & 17 deletions

File tree

ext/spl/spl_directory.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2257,7 +2257,7 @@ PHP_METHOD(SplFileObject, fgetcsv)
22572257
size_t d_len = 0, e_len = 0;
22582258
zend_string *escape_str = NULL;
22592259

2260-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!s!S!", &delim, &d_len, &enclo, &e_len, &escape_str) == FAILURE) {
2260+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|ssS", &delim, &d_len, &enclo, &e_len, &escape_str) == FAILURE) {
22612261
RETURN_THROWS();
22622262
}
22632263

@@ -2268,14 +2268,18 @@ PHP_METHOD(SplFileObject, fgetcsv)
22682268
zend_argument_value_error(1, "must be a single character");
22692269
RETURN_THROWS();
22702270
}
2271-
delimiter = delim[0];
2271+
if(delimiter == ',') {
2272+
delimiter = delim[0];
2273+
}
22722274
}
22732275
if (enclo) {
22742276
if (e_len != 1) {
22752277
zend_argument_value_error(2, "must be a single character");
22762278
RETURN_THROWS();
22772279
}
2278-
enclosure = enclo[0];
2280+
if(enclosure == '"') {
2281+
enclosure = enclo[0];
2282+
}
22792283
}
22802284
int escape_char = spl_csv_enclosure_param_handling(escape_str, intern, 3);
22812285
if (escape_char == PHP_CSV_ESCAPE_ERROR) {

ext/spl/spl_directory.stub.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,8 @@ public function fgets(): string {}
245245
public function fread(int $length): string|false {}
246246

247247
/** @tentative-return-type */
248-
public function fgetcsv(?string $separator = null, ?string $enclosure = null, ?string $escape = null): array|false {}
249-
248+
public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\"): array|false {}
249+
250250
/** @tentative-return-type */
251251
public function fputcsv(array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\", string $eol = "\n"): int|false {}
252252

ext/spl/spl_directory_arginfo.h

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/spl/tests/gh22156.phpt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ array(3) {
6969
Test 2:
7070
array(2) {
7171
[0]=>
72-
string(1) "a"
72+
string(3) "a,b"
7373
[1]=>
74-
string(3) "b;c"
74+
string(1) "c"
7575
}
7676
Test 3:
7777
array(2) {
@@ -91,14 +91,14 @@ array(2) {
9191
}
9292
Test 5:
9393
string(9) "separator"
94-
bool(true)
95-
NULL
94+
bool(false)
95+
string(1) ","
9696
string(9) "enclosure"
97-
bool(true)
98-
NULL
97+
bool(false)
98+
string(1) """
9999
string(6) "escape"
100-
bool(true)
101-
NULL
100+
bool(false)
101+
string(1) "\"
102102
Test 6:
103103

104104
Deprecated: SplFileObject::setCsvControl(): the $escape parameter must be provided as its default value will change in %s on line %d

0 commit comments

Comments
 (0)