Commit 3882f55a61f for php.net
commit 3882f55a61f831b4e222487bc1c50cc21b6803df
Author: Weilin Du <weilindu@php.net>
Date: Fri Jul 17 04:09:02 2026 +0800
ext/sockets: Fix socket_set_option() validation error messages (#22772)
Fix a few incorrect socket_set_option() validation error messages.
diff --git a/NEWS b/NEWS
index c35b46d24c0..d989b44146d 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,10 @@ PHP NEWS
- Date:
. Fixed leak on double DatePeriod::__construct() call. (ilutov)
+- Sockets:
+ . Fixed socket_set_option() validation error messages for UDP_SEGMENT and
+ SO_LINGER options. (Weilin Du)
+
30 Jul 2026, PHP 8.5.9
- Core:
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index 0e11280c914..5c8ad859851 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -2168,7 +2168,7 @@ PHP_FUNCTION(socket_set_option)
}
if (val_linger < 0 || val_linger > USHRT_MAX) {
- zend_argument_value_error(4, "\"%s\" must be between 0 and %d", l_linger, USHRT_MAX);
+ zend_argument_value_error(4, "\"%s\" must be between 0 and %u", l_linger_key, USHRT_MAX);
RETURN_THROWS();
}
@@ -2332,8 +2332,8 @@ PHP_FUNCTION(socket_set_option)
// UDP segmentation offload maximum size or 0 to disable it
if (ov < 0 || ov > USHRT_MAX) {
- zend_argument_value_error(4, "must be of between 0 and %u", USHRT_MAX);
- RETURN_FALSE;
+ zend_argument_value_error(4, "must be between 0 and %u", USHRT_MAX);
+ RETURN_THROWS();
}
optlen = sizeof(ov);
diff --git a/ext/sockets/tests/socket_cmsg_udp_segment.phpt b/ext/sockets/tests/socket_cmsg_udp_segment.phpt
index 679b246ea9d..38a91406651 100644
--- a/ext/sockets/tests/socket_cmsg_udp_segment.phpt
+++ b/ext/sockets/tests/socket_cmsg_udp_segment.phpt
@@ -22,5 +22,5 @@
}
?>
--EXPECT--
-socket_setopt(): Argument #4 ($value) must be of between 0 and 65535
-socket_setopt(): Argument #4 ($value) must be of between 0 and 65535
+socket_setopt(): Argument #4 ($value) must be between 0 and 65535
+socket_setopt(): Argument #4 ($value) must be between 0 and 65535
diff --git a/ext/sockets/tests/socket_set_option_timeo_error.phpt b/ext/sockets/tests/socket_set_option_timeo_error.phpt
index 1db5e01c362..befdfb09585 100644
--- a/ext/sockets/tests/socket_set_option_timeo_error.phpt
+++ b/ext/sockets/tests/socket_set_option_timeo_error.phpt
@@ -13,6 +13,7 @@
$options_3 = array("l_onoff" => "aaaa", "l_linger" => "1");
$options_4 = array("l_onoff" => "1", "l_linger" => []);
$options_5 = array("l_onoff" => PHP_INT_MAX, "l_linger" => "1");
+$options_6 = array("l_onoff" => "1", "l_linger" => PHP_INT_MAX);
try {
socket_set_option( $socket, SOL_SOCKET, SO_RCVTIMEO, new stdClass);
@@ -56,6 +57,11 @@
} catch (\ValueError $e) {
echo $e->getMessage() . PHP_EOL;
}
+try {
+ socket_set_option( $socket, SOL_SOCKET, SO_LINGER, $options_6);
+} catch (\ValueError $e) {
+ echo $e->getMessage() . PHP_EOL;
+}
?>
--EXPECTF--
socket_set_option(): Argument #4 ($value) must have key "sec"
@@ -64,3 +70,4 @@
socket_set_option(): Argument #4 ($value) must be of type array when argument #3 ($option) is SO_RCVTIMEO, string given
socket_set_option(): Argument #4 ($value) must be of type array when argument #3 ($option) is SO_LINGER, string given
socket_set_option(): Argument #4 ($value) "l_onoff" must be between 0 and %d
+socket_set_option(): Argument #4 ($value) "l_linger" must be between 0 and %d