[php-src] PHP-8.5: ext/sockets: Fix socket_set_option() validation error messages (#22772)

Weilin Du via GitHub <[email protected]>
Newsgroups gmane.comp.php.cvs.general
Message-ID <[email protected]>
Author: Weilin Du (LamentXU123)
Committer: GitHub (web-flow)
Pusher: LamentXU123
Date: 2026-07-17T04:09:02+08:00

Commit: https://github.com/php/php-src/commit/3882f55a61f831b4e222487bc1c50cc21b6803df
Raw diff: https://github.com/php/php-src/commit/3882f55a61f831b4e222487bc1c50cc21b6803df.diff

ext/sockets: Fix socket_set_option() validation error messages (#22772)

Fix a few incorrect socket_set_option() validation error messages.

Changed paths:
  M  NEWS
  M  ext/sockets/sockets.c
  M  ext/sockets/tests/socket_cmsg_udp_segment.phpt
  M  ext/sockets/tests/socket_set_option_timeo_error.phpt


Diff:

diff --git a/NEWS b/NEWS
index c35b46d24c08..d989b44146d2 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 0e11280c914f..5c8ad859851f 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 679b246ea9d4..38a914066510 100644
--- a/ext/sockets/tests/socket_cmsg_udp_segment.phpt
+++ b/ext/sockets/tests/socket_cmsg_udp_segment.phpt
@@ -22,5 +22,5 @@ try {
 }
 ?>
 --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 1db5e01c3622..befdfb095855 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_2 = array("sec" => new stdClass(), "usec" => "1");
 $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 @@ try {
 } 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 @@ Warning: Object of class stdClass could not be converted to int in %s on line %d
 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.