// $str = ReflectionClass::export(Foo::class, true) is:
$str = (string) new ReflectionClass(Foo::class);
+- Socket:
+ . The AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES flags for
+ socket_addrinfo_lookup() are deprecated, due to an upstream deprecation in
+ glibc.
+
- Standard:
. Passing invalid characters to ''base_convert()'', ''bindec()'', ''octdec()''
and ''hexdec()'' will now generate a deprecation notice. The result will
ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(zhints), key, hint) {
if (key) {
if (zend_string_equals_literal(key, "ai_flags")) {
- hints.ai_flags = zval_get_long(hint);
+ zend_long flags = zval_get_long(hint);
+#if HAVE_AI_IDN
+ if (flags & (AI_IDN_ALLOW_UNASSIGNED | AI_IDN_USE_STD3_ASCII_RULES)) {
+ php_error_docref(NULL, E_DEPRECATED,
+ "AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES are deprecated");
+ }
+#endif
+ hints.ai_flags = flags;
} else if (zend_string_equals_literal(key, "ai_socktype")) {
hints.ai_socktype = zval_get_long(hint);
} else if (zend_string_equals_literal(key, "ai_protocol")) {
--- /dev/null
+--TEST--
+AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES are deprecated
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) die('skip The sockets extension is not loaded');
+if (!defined('AI_IDN_ALLOW_UNASSIGNED')) die('skip AI_IDN_ALLOW_UNASSIGNED not defined');
+?>
+--FILE--
+<?php
+$addrinfo = socket_addrinfo_lookup('127.0.0.1', 2000, array(
+ 'ai_family' => AF_INET,
+ 'ai_socktype' => SOCK_DGRAM,
+ 'ai_flags' => AI_IDN_ALLOW_UNASSIGNED,
+));
+var_dump(socket_addrinfo_connect($addrinfo[0]));
+echo "Done";
+--EXPECTF--
+Deprecated: socket_addrinfo_lookup(): AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES are deprecated in %s on line %d
+resource(%d) of type (Socket)
+Done