diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 2b19b1e3c7828..db5eaf3388de9 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -25,6 +25,7 @@ #include "main/php_output.h" #include "SAPI.h" #include "php_ini.h" +#include "zend_attributes.h" #include #include diff --git a/ext/iconv/iconv.stub.php b/ext/iconv/iconv.stub.php index f3d2b8588eb80..10dca2fc76975 100644 --- a/ext/iconv/iconv.stub.php +++ b/ext/iconv/iconv.stub.php @@ -47,10 +47,12 @@ function iconv_mime_decode_headers(string $headers, int $mode = 0, ?string $enco /** @refcount 1 */ function iconv(string $from_encoding, string $to_encoding, string $string): string|false {} +#[\Deprecated(since: '8.5', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] function iconv_set_encoding(string $type, string $encoding): bool {} /** * @return array|string|false * @refcount 1 */ +#[\Deprecated(since: '8.5', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] function iconv_get_encoding(string $type = "all"): array|string|false {} diff --git a/ext/iconv/iconv_arginfo.h b/ext/iconv/iconv_arginfo.h index df2ecad3898e9..ad48c5e589469 100644 --- a/ext/iconv/iconv_arginfo.h +++ b/ext/iconv/iconv_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 4367fa431d3e4814e42d9aa514c10cae1d842d8f */ + * Stub hash: 2bab7d4e330ab8200a072a23d98816cef0c7ba9c */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_iconv_strlen, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) @@ -79,8 +79,8 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(iconv_mime_decode, arginfo_iconv_mime_decode) ZEND_FE(iconv_mime_decode_headers, arginfo_iconv_mime_decode_headers) ZEND_FE(iconv, arginfo_iconv) - ZEND_FE(iconv_set_encoding, arginfo_iconv_set_encoding) - ZEND_FE(iconv_get_encoding, arginfo_iconv_get_encoding) + ZEND_RAW_FENTRY("iconv_set_encoding", zif_iconv_set_encoding, arginfo_iconv_set_encoding, ZEND_ACC_DEPRECATED, NULL, NULL) + ZEND_RAW_FENTRY("iconv_get_encoding", zif_iconv_get_encoding, arginfo_iconv_get_encoding, ZEND_ACC_DEPRECATED, NULL, NULL) ZEND_FE_END }; @@ -90,4 +90,18 @@ static void register_iconv_symbols(int module_number) REGISTER_STRING_CONSTANT("ICONV_VERSION", get_iconv_version(), CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ICONV_MIME_DECODE_STRICT", PHP_ICONV_MIME_DECODE_STRICT, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ICONV_MIME_DECODE_CONTINUE_ON_ERROR", PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR, CONST_PERSISTENT); + + + zend_attribute *attribute_Deprecated_func_iconv_set_encoding_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "iconv_set_encoding", sizeof("iconv_set_encoding") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); + ZVAL_STR(&attribute_Deprecated_func_iconv_set_encoding_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_5)); + attribute_Deprecated_func_iconv_set_encoding_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); + zend_string *attribute_Deprecated_func_iconv_set_encoding_0_arg1_str = zend_string_init("use internal_encoding, input_encoding, and output_encoding INI settings instead", strlen("use internal_encoding, input_encoding, and output_encoding INI settings instead"), 1); + ZVAL_STR(&attribute_Deprecated_func_iconv_set_encoding_0->args[1].value, attribute_Deprecated_func_iconv_set_encoding_0_arg1_str); + attribute_Deprecated_func_iconv_set_encoding_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); + + zend_attribute *attribute_Deprecated_func_iconv_get_encoding_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "iconv_get_encoding", sizeof("iconv_get_encoding") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); + ZVAL_STR(&attribute_Deprecated_func_iconv_get_encoding_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_5)); + attribute_Deprecated_func_iconv_get_encoding_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); + ZVAL_STR_COPY(&attribute_Deprecated_func_iconv_get_encoding_0->args[1].value, attribute_Deprecated_func_iconv_set_encoding_0_arg1_str); + attribute_Deprecated_func_iconv_get_encoding_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); } diff --git a/ext/iconv/tests/iconv_encoding_deprecated.phpt b/ext/iconv/tests/iconv_encoding_deprecated.phpt new file mode 100644 index 0000000000000..230b77be13aaa --- /dev/null +++ b/ext/iconv/tests/iconv_encoding_deprecated.phpt @@ -0,0 +1,48 @@ +--TEST-- +iconv encoding deprecated +--EXTENSIONS-- +iconv +--FILE-- + +--EXPECTF-- +Deprecated: Function iconv_set_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d + +Deprecated: iconv_set_encoding(): Use of iconv.internal_encoding is deprecated in %s on line %d + +Deprecated: Function iconv_set_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d + +Deprecated: iconv_set_encoding(): Use of iconv.output_encoding is deprecated in %s on line %d + +Deprecated: Function iconv_set_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d + +Deprecated: iconv_set_encoding(): Use of iconv.input_encoding is deprecated in %s on line %d + +Deprecated: Function iconv_get_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d +string(5) "UTF-8" + +Deprecated: Function iconv_get_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d +string(5) "UTF-8" + +Deprecated: Function iconv_get_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d +string(5) "UTF-8" + +Deprecated: Function iconv_get_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d +array(3) { + ["input_encoding"]=> + string(5) "UTF-8" + ["output_encoding"]=> + string(5) "UTF-8" + ["internal_encoding"]=> + string(5) "UTF-8" +} diff --git a/ext/iconv/tests/iconv_set_encoding-charset-length-cve-2007-4840.phpt b/ext/iconv/tests/iconv_set_encoding-charset-length-cve-2007-4840.phpt index bb05d6794b8b1..2d7502e061fe9 100644 --- a/ext/iconv/tests/iconv_set_encoding-charset-length-cve-2007-4840.phpt +++ b/ext/iconv/tests/iconv_set_encoding-charset-length-cve-2007-4840.phpt @@ -10,11 +10,18 @@ var_dump(iconv_set_encoding("output_encoding", $a)); var_dump(iconv_set_encoding("internal_encoding", $a)); ?> --EXPECTF-- + +Deprecated: Function iconv_set_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d + Warning: iconv_set_encoding(): Encoding parameter exceeds the maximum allowed length of 64 characters in %s on line %d bool(false) +Deprecated: Function iconv_set_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d + Warning: iconv_set_encoding(): Encoding parameter exceeds the maximum allowed length of 64 characters in %s on line %d bool(false) +Deprecated: Function iconv_set_encoding() is deprecated since 8.5, use internal_encoding, input_encoding, and output_encoding INI settings instead in %s on line %d + Warning: iconv_set_encoding(): Encoding parameter exceeds the maximum allowed length of 64 characters in %s on line %d bool(false)