diff --git a/NEWS b/NEWS index 1ec22e1faad..d2dcfbce70c 100644 --- a/NEWS +++ b/NEWS @@ -36,6 +36,10 @@ PHP NEWS - SQLite3: . Fixed bug GH-9032 (SQLite3 authorizer crashes on NULL values). (cmb) +- Streams: + . Fixed bug GH-8472 (The resource returned by stream_socket_accept may have + incorrect metadata). (Jakub Zelenka) + 04 Aug 2022, PHP 8.1.9 - CLI: diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index ce23fb29f42..58ba4b0499c 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -2294,6 +2294,10 @@ static inline int php_openssl_tcp_sockop_accept(php_stream *stream, php_openssl_ memcpy(clisockdata, sock, sizeof(clisockdata->s)); clisockdata->s.socket = clisock; +#ifdef __linux__ + /* O_NONBLOCK is not inherited on Linux */ + clisockdata->s.is_blocked = 1; +#endif xparam->outputs.client = php_stream_alloc_rel(stream->ops, clisockdata, NULL, "r+"); if (xparam->outputs.client) { diff --git a/ext/standard/tests/streams/gh8472.phpt b/ext/standard/tests/streams/gh8472.phpt new file mode 100644 index 00000000000..b03c0ceb5e1 --- /dev/null +++ b/ext/standard/tests/streams/gh8472.phpt @@ -0,0 +1,35 @@ +--TEST-- +GH-8472: The resource returned by stream_socket_accept may have incorrect metadata +--FILE-- + +--EXPECT-- +string(4) "0000" +string(1) "0" diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c index 10d584fa424..b17eccf2eeb 100644 --- a/main/streams/xp_socket.c +++ b/main/streams/xp_socket.c @@ -841,6 +841,10 @@ static inline int php_tcp_sockop_accept(php_stream *stream, php_netstream_data_t memcpy(clisockdata, sock, sizeof(*clisockdata)); clisockdata->socket = clisock; +#ifdef __linux__ + /* O_NONBLOCK is not inherited on Linux */ + clisockdata->is_blocked = 1; +#endif xparam->outputs.client = php_stream_alloc_rel(stream->ops, clisockdata, NULL, "r+"); if (xparam->outputs.client) {