[php-src] master: Merge branch 'PHP-8.5'
Weilin Du <[email protected]>
| Newsgroups | gmane.comp.php.cvs.general |
|---|---|
| Message-ID | <[email protected]> |
Author: Weilin Du (LamentXU123)
Date: 2026-06-29T22:51:38+08:00
Commit: https://github.com/php/php-src/commit/275684b36b9018bb4d1d4ad3153699dce579c2de
Raw diff: https://github.com/php/php-src/commit/275684b36b9018bb4d1d4ad3153699dce579c2de.diff
Merge branch 'PHP-8.5'
* PHP-8.5:
ext/intl: Reset IntlChar error state on method entry (#22500)
Changed paths:
A ext/intl/tests/intlchar_reset_error.phpt
M ext/intl/uchar/uchar.cpp
Diff:
diff --git a/ext/intl/tests/intlchar_reset_error.phpt b/ext/intl/tests/intlchar_reset_error.phpt
new file mode 100644
index 000000000000..45f6d1df2961
--- /dev/null
+++ b/ext/intl/tests/intlchar_reset_error.phpt
@@ -0,0 +1,19 @@
+--TEST--
+IntlChar methods reset intl error on success
+--EXTENSIONS--
+intl
+--FILE--
+<?php
+var_dump(IntlChar::digit('a', 1));
+var_dump(intl_get_error_code() !== U_ZERO_ERROR);
+
+var_dump(IntlChar::forDigit(1) === ord('1'));
+var_dump(intl_get_error_code() === U_ZERO_ERROR);
+var_dump(intl_get_error_message() === 'U_ZERO_ERROR');
+?>
+--EXPECT--
+bool(false)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
diff --git a/ext/intl/uchar/uchar.cpp b/ext/intl/uchar/uchar.cpp
index 83d5ab15d341..8dc6a58a8287 100644
--- a/ext/intl/uchar/uchar.cpp
+++ b/ext/intl/uchar/uchar.cpp
@@ -70,6 +70,8 @@ IC_METHOD(chr) {
char buffer[5];
int buffer_len = 0;
+ intl_error_reset(NULL);
+
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) {
RETURN_NULL();
}
@@ -89,6 +91,8 @@ IC_METHOD(chr) {
IC_METHOD(ord) {
UChar32 cp;
+ intl_error_reset(NULL);
+
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) {
RETURN_NULL();
}
@@ -104,6 +108,8 @@ IC_METHOD(hasBinaryProperty) {
zend_string *string_codepoint;
zend_long int_codepoint = 0;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_STR_OR_LONG(string_codepoint, int_codepoint)
Z_PARAM_LONG(prop)
@@ -124,6 +130,8 @@ IC_METHOD(getIntPropertyValue) {
zend_string *string_codepoint;
zend_long int_codepoint = 0;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_STR_OR_LONG(string_codepoint, int_codepoint)
Z_PARAM_LONG(prop)
@@ -141,6 +149,8 @@ IC_METHOD(getIntPropertyValue) {
IC_METHOD(getIntPropertyMinValue) {
zend_long prop;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_LONG(prop)
ZEND_PARSE_PARAMETERS_END();
@@ -153,6 +163,8 @@ IC_METHOD(getIntPropertyMinValue) {
IC_METHOD(getIntPropertyMaxValue) {
zend_long prop;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_LONG(prop)
ZEND_PARSE_PARAMETERS_END();
@@ -165,6 +177,8 @@ IC_METHOD(getIntPropertyMaxValue) {
IC_METHOD(getNumericValue) {
UChar32 cp;
+ intl_error_reset(NULL);
+
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) {
RETURN_NULL();
}
@@ -207,6 +221,8 @@ static UBool enumCharType_callback(enumCharType_data *context,
IC_METHOD(enumCharTypes) {
enumCharType_data context;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_FUNC(context.fci, context.fci_cache)
ZEND_PARSE_PARAMETERS_END();
@@ -218,6 +234,8 @@ IC_METHOD(enumCharTypes) {
IC_METHOD(getBlockCode) {
UChar32 cp;
+ intl_error_reset(NULL);
+
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) {
RETURN_NULL();
}
@@ -236,6 +254,8 @@ IC_METHOD(charName) {
zend_string *buffer = NULL;
int32_t buffer_len;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STR_OR_LONG(string_codepoint, int_codepoint)
Z_PARAM_OPTIONAL
@@ -266,6 +286,8 @@ IC_METHOD(charFromName) {
UChar32 ret;
UErrorCode error = U_ZERO_ERROR;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STRING(name, name_len)
Z_PARAM_OPTIONAL
@@ -317,6 +339,7 @@ IC_METHOD(enumCharNames) {
zend_long nameChoice = U_UNICODE_CHAR_NAME;
UErrorCode error = U_ZERO_ERROR;
+ intl_error_reset(NULL);
ZEND_PARSE_PARAMETERS_START(3, 4)
Z_PARAM_STR_OR_LONG(string_start, int_start)
@@ -342,6 +365,8 @@ IC_METHOD(getPropertyName) {
zend_long nameChoice = U_LONG_PROPERTY_NAME;
const char *ret;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_LONG(property)
Z_PARAM_OPTIONAL
@@ -364,6 +389,8 @@ IC_METHOD(getPropertyEnum) {
char *alias;
size_t alias_len;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_STRING(alias, alias_len)
ZEND_PARSE_PARAMETERS_END();
@@ -377,6 +404,8 @@ IC_METHOD(getPropertyValueName) {
zend_long property, value, nameChoice = U_LONG_PROPERTY_NAME;
const char *ret;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(2, 3)
Z_PARAM_LONG(property)
Z_PARAM_LONG(value)
@@ -401,6 +430,8 @@ IC_METHOD(getPropertyValueEnum) {
char *name;
size_t name_len;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_LONG(property)
Z_PARAM_STRING(name, name_len)
@@ -417,6 +448,8 @@ IC_METHOD(foldCase) {
zend_string *string_codepoint;
zend_long int_codepoint = 0;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STR_OR_LONG(string_codepoint, int_codepoint)
Z_PARAM_OPTIONAL
@@ -448,6 +481,8 @@ IC_METHOD(digit) {
zend_string *string_codepoint;
zend_long int_codepoint = 0;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_STR_OR_LONG(string_codepoint, int_codepoint)
Z_PARAM_OPTIONAL
@@ -472,6 +507,8 @@ IC_METHOD(digit) {
IC_METHOD(forDigit) {
zend_long digit, radix = 10;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_LONG(digit)
Z_PARAM_OPTIONAL
@@ -488,6 +525,8 @@ IC_METHOD(charAge) {
UVersionInfo version;
int i;
+ intl_error_reset(NULL);
+
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) {
RETURN_NULL();
}
@@ -505,6 +544,8 @@ IC_METHOD(getUnicodeVersion) {
UVersionInfo version;
int i;
+ intl_error_reset(NULL);
+
ZEND_PARSE_PARAMETERS_NONE();
u_getUnicodeVersion(version);
@@ -523,6 +564,8 @@ IC_METHOD(getFC_NFKC_Closure) {
int32_t closure_len;
UErrorCode error = U_ZERO_ERROR;
+ intl_error_reset(NULL);
+
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) {
RETURN_NULL();
}
@@ -551,6 +594,7 @@ IC_METHOD(getFC_NFKC_Closure) {
#define IC_BOOL_METHOD_CHAR(name) \
IC_METHOD(name) { \
UChar32 cp; \
+ intl_error_reset(NULL); \
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) { \
RETURN_NULL(); \
} \
@@ -591,6 +635,7 @@ IC_BOOL_METHOD_CHAR(isJavaIDPart)
#define IC_INT_METHOD_CHAR(name) \
IC_METHOD(name) { \
UChar32 cp; \
+ intl_error_reset(NULL); \
if (parse_code_point_param(INTERNAL_FUNCTION_PARAM_PASSTHRU, &cp) == FAILURE) { \
RETURN_NULL(); \
} \
@@ -611,6 +656,7 @@ IC_METHOD(name) { \
UChar32 cp, ret; \
zend_string *string_codepoint; \
zend_long int_codepoint = -1; \
+ intl_error_reset(NULL); \
ZEND_PARSE_PARAMETERS_START(1, 1) \
Z_PARAM_STR_OR_LONG(string_codepoint, int_codepoint) \
ZEND_PARSE_PARAMETERS_END(); \