diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c index e104126dbfe2..6f1e86fd110a 100644 --- a/ext/sockets/sockets.c +++ b/ext/sockets/sockets.c @@ -2760,7 +2760,7 @@ PHP_FUNCTION(socket_addrinfo_lookup) # endif #endif - if (zhints) { + if (zhints && zend_hash_num_elements(Z_ARRVAL_P(zhints)) > 0) { if (UNEXPECTED(HT_IS_PACKED(Z_ARRVAL_P(zhints)))) { zend_argument_value_error(3, "must only contain array keys \"ai_flags\", \"ai_socktype\", " "\"ai_protocol\", or \"ai_family\""); diff --git a/ext/sockets/tests/socket_addrinfo_lookup_empty_packed_hints.phpt b/ext/sockets/tests/socket_addrinfo_lookup_empty_packed_hints.phpt new file mode 100644 index 000000000000..6905a1bad17d --- /dev/null +++ b/ext/sockets/tests/socket_addrinfo_lookup_empty_packed_hints.phpt @@ -0,0 +1,21 @@ +--TEST-- +socket_addrinfo_lookup(): an empty packed hints array is accepted like [] +--EXTENSIONS-- +sockets +--FILE-- +getMessage(), "\n"; +} +?> +--EXPECT-- +int(0) +bool(true) +bool(true) +ValueError: socket_addrinfo_lookup(): Argument #3 ($hints) must only contain array keys "ai_flags", "ai_socktype", "ai_protocol", or "ai_family"