[php-src] master: Merge branch 'PHP-8.5'

Weilin Du <[email protected]>
Newsgroups gmane.comp.php.cvs.general
Message-ID <[email protected]>
Author: Weilin Du (LamentXU123)
Date: 2026-07-17T04:17:57+08:00

Commit: https://github.com/php/php-src/commit/51300b7f59fa4ae97015d519c442bb7f581c9769
Raw diff: https://github.com/php/php-src/commit/51300b7f59fa4ae97015d519c442bb7f581c9769.diff

Merge branch 'PHP-8.5'

* PHP-8.5:
  ext/sockets: Fix socket_set_option() validation error messages (#22772)

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 cb10b3be0b6d..e1a8e55de7bc 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,10 @@ PHP                                                                        NEWS
   . Fixed bug GH-22681 (Reflection*::__toString() truncates on null bytes).
     (DanielEScherzer)
 
+- Sockets:
+  . Fixed socket_set_option() validation error messages for UDP_SEGMENT and
+    SO_LINGER options. (Weilin Du)
+
 16 Jul 2026, PHP 8.6.0alpha2
 
 - Core:
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index dbf7f4e6ad4b..ea90c2ae6425 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -2211,7 +2211,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();
 			}
 
@@ -2375,8 +2375,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.