From 45157d24ea06cec3490c4a3fc834c996c1a96043 Mon Sep 17 00:00:00 2001 From: Arshid Date: Mon, 16 Mar 2026 13:07:43 +0530 Subject: [PATCH 1/3] ext/zip: Remove unreachable break after RETURN_STRING (#21458) --- ext/zip/php_zip.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index c6f516e3a262c..04c3d671537ad 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -1416,12 +1416,10 @@ static void php_zip_entry_get_info(INTERNAL_FUNCTION_PARAMETERS, int opt) /* {{{ RETURN_STRING("imploded"); case 7: RETURN_STRING("tokenized"); - break; case 8: RETURN_STRING("deflated"); case 9: RETURN_STRING("deflatedX"); - break; case 10: RETURN_STRING("implodedX"); default: From f44609c84d5465e5de964ee0cfdcb5faf59bdee4 Mon Sep 17 00:00:00 2001 From: Arshid Date: Mon, 16 Mar 2026 13:10:55 +0530 Subject: [PATCH 2/3] ext/standard: Remove unreachable break after RETURN_STRING (#21459) --- ext/standard/assert.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ext/standard/assert.c b/ext/standard/assert.c index a29d022b4ac47..501ea5508dd32 100644 --- a/ext/standard/assert.c +++ b/ext/standard/assert.c @@ -285,7 +285,6 @@ PHP_FUNCTION(assert_options) zend_string_release_ex(value_str, 0); } RETURN_LONG(oldint); - break; case PHP_ASSERT_BAIL: oldint = ASSERTG(bail); @@ -301,7 +300,6 @@ PHP_FUNCTION(assert_options) zend_string_release_ex(value_str, 0); } RETURN_LONG(oldint); - break; case PHP_ASSERT_WARNING: oldint = ASSERTG(warning); @@ -317,7 +315,6 @@ PHP_FUNCTION(assert_options) zend_string_release_ex(value_str, 0); } RETURN_LONG(oldint); - break; case PHP_ASSERT_CALLBACK: if (Z_TYPE(ASSERTG(callback)) != IS_UNDEF) { @@ -352,7 +349,6 @@ PHP_FUNCTION(assert_options) zend_string_release_ex(key, 0); } RETURN_LONG(oldint); - break; default: zend_argument_value_error(1, "must be an ASSERT_* constant"); From 0039af028cb32b53239225cba3459995d3bd7e5d Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Tue, 3 Mar 2026 13:37:04 +0100 Subject: [PATCH 3/3] Propagate bind error for stream_socket_server() When stream_socket_server() fails during bind(), we're currently only showing "Unknown error" in the error message. Properly propagate this error for better diagnostics. Closes GH-21328 --- NEWS | 1 + .../stream_socket_server_bind_error.phpt | 19 +++++++++++++++++++ main/streams/xp_socket.c | 7 ++++++- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 ext/standard/tests/network/stream_socket_server_bind_error.phpt diff --git a/NEWS b/NEWS index 4dcac8bb21e4f..ca6b431d70cd8 100644 --- a/NEWS +++ b/NEWS @@ -145,6 +145,7 @@ PHP NEWS . Allowed filtered streams to be casted as fd for select. (Jakub Zelenka) . Fixed bug GH-21221 (Prevent closing of innerstream of php://temp stream). (ilutov) + . Improved stream_socket_server() bind failure error reporting. (ilutov) - Zip: . Fixed ZipArchive callback being called after executor has shut down. diff --git a/ext/standard/tests/network/stream_socket_server_bind_error.phpt b/ext/standard/tests/network/stream_socket_server_bind_error.phpt new file mode 100644 index 0000000000000..2f5becb66a91d --- /dev/null +++ b/ext/standard/tests/network/stream_socket_server_bind_error.phpt @@ -0,0 +1,19 @@ +--TEST-- +stream_socket_server() bind error +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +Warning: stream_socket_server(): Unable to connect to tcp://0.0.0.0:%d (Address %r(already )?%rin use) in %s on line %d diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 9eae9e460e475..f21944313d32a 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -699,8 +699,13 @@ static inline int php_tcp_sockop_bind(php_stream *stream, php_netstream_data_t * parse_unix_address(xparam, &unix_addr); - return bind(sock->socket, (const struct sockaddr *)&unix_addr, + int result = bind(sock->socket, (const struct sockaddr *)&unix_addr, (socklen_t) XtOffsetOf(struct sockaddr_un, sun_path) + xparam->inputs.namelen); + if (result == -1 && xparam->want_errortext) { + char errstr[256]; + xparam->outputs.error_text = strpprintf(0, "%s", php_socket_strerror_s(errno, errstr, sizeof(errstr))); + } + return result; } #endif