Skip to content

Commit fc01e2e

Browse files
committed
Merge branch 'PHP-8.3'
2 parents a27878c + d7d40b4 commit fc01e2e

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

ext/standard/file.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1885,8 +1885,8 @@ PHP_FUNCTION(fgetcsv)
18851885

18861886
if (len_is_null || len == 0) {
18871887
len = -1;
1888-
} else if (len < 0) {
1889-
zend_argument_value_error(2, "must be a greater than or equal to 0");
1888+
} else if (len < 0 || len > (ZEND_LONG_MAX - 1)) {
1889+
zend_argument_value_error(2, "must be between 0 and " ZEND_LONG_FMT, (ZEND_LONG_MAX - 1));
18901890
RETURN_THROWS();
18911891
}
18921892

ext/standard/tests/file/fgetcsv_error_conditions.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ try {
4848
echo $e->getMessage() . \PHP_EOL;
4949
}
5050
?>
51-
--EXPECT--
51+
--EXPECTF--
5252
fgetcsv() with negative length
53-
fgetcsv(): Argument #2 ($length) must be a greater than or equal to 0
54-
fgetcsv(): Argument #2 ($length) must be a greater than or equal to 0
55-
fgetcsv(): Argument #2 ($length) must be a greater than or equal to 0
53+
fgetcsv(): Argument #2 ($length) must be between 0 and %d
54+
fgetcsv(): Argument #2 ($length) must be between 0 and %d
55+
fgetcsv(): Argument #2 ($length) must be between 0 and %d
5656
fgetcsv() with delimiter as empty string
5757
fgetcsv(): Argument #3 ($separator) must be a single character
5858
fgetcsv() with enclosure as empty string

ext/standard/tests/file/gh15653.phpt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
GH-15653 (fgetcsv overflow on length argument)
3+
--FILE--
4+
<?php
5+
$filename = __DIR__ . "/gh15653.tmp";
6+
touch($filename);
7+
$fp = fopen ($filename, "r");
8+
9+
try {
10+
fgetcsv($fp, PHP_INT_MAX);
11+
} catch (\ValueError $e) {
12+
echo $e->getMessage() . PHP_EOL;
13+
}
14+
15+
fgetcsv($fp, PHP_INT_MAX-1);
16+
--CLEAN--
17+
<?php
18+
@unlink(__DIR__ . "/gh15653.tmp");
19+
?>
20+
--EXPECTF--
21+
fgetcsv(): Argument #2 ($length) must be between 0 and %d
22+
%A

0 commit comments

Comments
 (0)