Skip to content

Commit 543c4bb

Browse files
committed
Merge branch 'PHP-8.3'
* PHP-8.3: Fix passing non-finite timeout values in stream functions
2 parents 77f870e + a0e1e08 commit 543c4bb

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

ext/standard/streamsfuncs.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ PHP_FUNCTION(stream_socket_client)
124124

125125
if (timeout_is_null) {
126126
timeout = (double)FG(default_socket_timeout);
127+
} else if (!zend_finite(timeout)) {
128+
zend_argument_value_error(4, "must be a finite value");
129+
RETURN_THROWS();
127130
}
128131

129132
context = php_stream_context_from_zval(zcontext, flags & PHP_FILE_NO_DEFAULT_CONTEXT);
@@ -276,6 +279,9 @@ PHP_FUNCTION(stream_socket_accept)
276279

277280
if (timeout_is_null) {
278281
timeout = (double)FG(default_socket_timeout);
282+
} else if (!zend_finite(timeout)) {
283+
zend_argument_value_error(2, "must be a finite value");
284+
RETURN_THROWS();
279285
}
280286

281287
php_stream_from_zval(stream, zstream);
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
--TEST--
2+
Non-finite timeout values in stream functions
3+
--FILE--
4+
<?php
5+
$socket = stream_socket_server("tcp://0.0.0.0:14781", $errno, $errstr);
6+
foreach ([NAN, -NAN, INF, -INF] as $value) {
7+
try {
8+
stream_socket_accept($socket, $value);
9+
} catch (ValueError $e) {
10+
echo $e->getMessage(), "\n";
11+
}
12+
}
13+
fclose($socket);
14+
15+
foreach ([NAN, -NAN, INF, -INF] as $value) {
16+
try {
17+
stream_socket_client("tcp://0.0.0.0:14781", timeout: $value);
18+
} catch (ValueError $e) {
19+
echo $e->getMessage(), "\n";
20+
}
21+
}
22+
?>
23+
--EXPECT--
24+
stream_socket_accept(): Argument #2 ($timeout) must be a finite value
25+
stream_socket_accept(): Argument #2 ($timeout) must be a finite value
26+
stream_socket_accept(): Argument #2 ($timeout) must be a finite value
27+
stream_socket_accept(): Argument #2 ($timeout) must be a finite value
28+
stream_socket_client(): Argument #4 ($timeout) must be a finite value
29+
stream_socket_client(): Argument #4 ($timeout) must be a finite value
30+
stream_socket_client(): Argument #4 ($timeout) must be a finite value
31+
stream_socket_client(): Argument #4 ($timeout) must be a finite value

0 commit comments

Comments
 (0)