diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index f4460c68f7527..5335a47291b5a 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -67,10 +67,22 @@ PHP_FUNCTION(stream_socket_pair) RETURN_FALSE; } - array_init(return_value); - - s1 = php_stream_sock_open_from_socket(pair[0], 0); - s2 = php_stream_sock_open_from_socket(pair[1], 0); + s1 = php_stream_sock_open_from_socket(pair[0], 0); + if (s1 == NULL) { + close(pair[0]); + close(pair[1]); + php_error_docref(NULL, E_WARNING, "Failed to open stream from socketpair"); + RETURN_FALSE; + } + s2 = php_stream_sock_open_from_socket(pair[1], 0); + if (s2 == NULL) { + php_stream_free(s1, PHP_STREAM_FREE_CLOSE); + close(pair[1]); + php_error_docref(NULL, E_WARNING, "Failed to open stream from socketpair"); + RETURN_FALSE; + } + + array_init(return_value); /* set the __exposed flag. * php_stream_to_zval() does, add_next_index_resource() does not */