From b550127c99a877fa5e8c8ce1cc6ac8034b90dcd6 Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Tue, 2 Sep 2025 00:49:23 +0200 Subject: [PATCH 1/3] iconv: deprecated iconv_set_encoding() and iconv_get_encoding() --- ext/iconv/iconv.c | 1 + ext/iconv/iconv.stub.php | 2 + ext/iconv/iconv_arginfo.h | 21 ++++++-- .../tests/iconv_encoding_deprecated.phpt | 48 +++++++++++++++++++ ...encoding-charset-length-cve-2007-4840.phpt | 7 +++ 5 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 ext/iconv/tests/iconv_encoding_deprecated.phpt 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..831fbbfa25618 100644 --- a/ext/iconv/iconv.stub.php +++ b/ext/iconv/iconv.stub.php @@ -47,8 +47,10 @@ 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: '5.6', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] function iconv_set_encoding(string $type, string $encoding): bool {} +#[\Deprecated(since: '5.6', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] /** * @return array|string|false * @refcount 1 diff --git a/ext/iconv/iconv_arginfo.h b/ext/iconv/iconv_arginfo.h index df2ecad3898e9..dbdabcf8835dd 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: d4c97a2c1122fea44207c8e0dd7a4e2e3b662229 */ 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,19 @@ 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); + zend_string *attribute_Deprecated_func_iconv_set_encoding_0_arg0_str = zend_string_init("5.6", strlen("5.6"), 1); + ZVAL_STR(&attribute_Deprecated_func_iconv_set_encoding_0->args[0].value, attribute_Deprecated_func_iconv_set_encoding_0_arg0_str); + 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_COPY(&attribute_Deprecated_func_iconv_get_encoding_0->args[0].value, attribute_Deprecated_func_iconv_set_encoding_0_arg0_str); + 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..deed7ebd2b3cf --- /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 5.6, 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 5.6, 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 5.6, 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 5.6, 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 5.6, 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 5.6, 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 5.6, 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..202c6879b8922 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 5.6, 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 5.6, 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 5.6, 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) From 0e6b42a661a7c0a24e8342d7ff88d118e85ce16f Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Wed, 3 Sep 2025 23:13:10 +0200 Subject: [PATCH 2/3] fix the order of attribute and phpdoc --- ext/iconv/iconv.stub.php | 2 +- ext/iconv/iconv_arginfo.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/iconv/iconv.stub.php b/ext/iconv/iconv.stub.php index 831fbbfa25618..1f68c4aa642d5 100644 --- a/ext/iconv/iconv.stub.php +++ b/ext/iconv/iconv.stub.php @@ -50,9 +50,9 @@ function iconv(string $from_encoding, string $to_encoding, string $string): stri #[\Deprecated(since: '5.6', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] function iconv_set_encoding(string $type, string $encoding): bool {} -#[\Deprecated(since: '5.6', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] /** * @return array|string|false * @refcount 1 */ +#[\Deprecated(since: '5.6', 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 dbdabcf8835dd..fe574ba24b299 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: d4c97a2c1122fea44207c8e0dd7a4e2e3b662229 */ + * Stub hash: bab63f28274e95176ffd30e39094436dc0c8b0fc */ 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) From cb0a2537c98be2deb1f2f80fcae4d3c3848fbecb Mon Sep 17 00:00:00 2001 From: Jorg Sowa Date: Thu, 4 Sep 2025 18:08:47 +0200 Subject: [PATCH 3/3] doc: changed php version of deprecation to 8.5 --- ext/iconv/iconv.stub.php | 4 ++-- ext/iconv/iconv_arginfo.h | 7 +++---- ext/iconv/tests/iconv_encoding_deprecated.phpt | 14 +++++++------- ..._set_encoding-charset-length-cve-2007-4840.phpt | 6 +++--- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/ext/iconv/iconv.stub.php b/ext/iconv/iconv.stub.php index 1f68c4aa642d5..10dca2fc76975 100644 --- a/ext/iconv/iconv.stub.php +++ b/ext/iconv/iconv.stub.php @@ -47,12 +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: '5.6', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] +#[\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: '5.6', message: 'use internal_encoding, input_encoding, and output_encoding INI settings instead')] +#[\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 fe574ba24b299..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: bab63f28274e95176ffd30e39094436dc0c8b0fc */ + * 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) @@ -93,15 +93,14 @@ static void register_iconv_symbols(int module_number) 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); - zend_string *attribute_Deprecated_func_iconv_set_encoding_0_arg0_str = zend_string_init("5.6", strlen("5.6"), 1); - ZVAL_STR(&attribute_Deprecated_func_iconv_set_encoding_0->args[0].value, attribute_Deprecated_func_iconv_set_encoding_0_arg0_str); + 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_COPY(&attribute_Deprecated_func_iconv_get_encoding_0->args[0].value, attribute_Deprecated_func_iconv_set_encoding_0_arg0_str); + 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 index deed7ebd2b3cf..230b77be13aaa 100644 --- a/ext/iconv/tests/iconv_encoding_deprecated.phpt +++ b/ext/iconv/tests/iconv_encoding_deprecated.phpt @@ -16,28 +16,28 @@ var_dump( iconv_get_encoding('all') ); ?> --EXPECTF-- -Deprecated: Function iconv_set_encoding() is deprecated since 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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.internal_encoding is deprecated in %s on line %d -Deprecated: Function iconv_set_encoding() is deprecated since 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 array(3) { ["input_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 202c6879b8922..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 @@ -11,17 +11,17 @@ var_dump(iconv_set_encoding("internal_encoding", $a)); ?> --EXPECTF-- -Deprecated: Function iconv_set_encoding() is deprecated since 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 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 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 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 5.6, use internal_encoding, input_encoding, and output_encoding INI settings instead 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 Warning: iconv_set_encoding(): Encoding parameter exceeds the maximum allowed length of 64 characters in %s on line %d bool(false)