Skip to content

Commit d98cac3

Browse files
committed
[intl] Record the ICU error code on Spoofchecker check failure
Spoofchecker::isSuspicious(), ::areConfusable() and ::areBidiConfusable() warn on U_FAILURE but never store the code, so intl_get_error_code() still reads U_ZERO_ERROR after a failed check. Record it so a caller can tell an internal ICU failure from a real detection. The true return is unchanged. Closes phpGH-23520
1 parent 0a3fe0a commit d98cac3

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

ext/intl/spoofchecker/spoofchecker_main.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ U_CFUNC PHP_METHOD(Spoofchecker, isSuspicious)
4646
ret = intl_icu_compat_uspoof_check_utf8(co->uspoof, ZSTR_VAL(text), ZSTR_LEN(text), co->uspoofres, SPOOFCHECKER_ERROR_CODE_P(co));
4747

4848
if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) {
49+
intl_error_set_code(NULL, SPOOFCHECKER_ERROR_CODE(co));
4950
php_error_docref(NULL, E_WARNING, "(%d) %s", SPOOFCHECKER_ERROR_CODE(co), u_errorName(SPOOFCHECKER_ERROR_CODE(co)));
5051

5152
if (intl_icu_compat_uspoof_check_result_mismatch(co->uspoofres, ret, &errmask, SPOOFCHECKER_ERROR_CODE_P(co))) {
@@ -83,6 +84,7 @@ U_CFUNC PHP_METHOD(Spoofchecker, areConfusable)
8384
ret = uspoof_areConfusableUTF8(co->uspoof, ZSTR_VAL(s1), (int32_t)ZSTR_LEN(s1), ZSTR_VAL(s2), (int32_t)ZSTR_LEN(s2), SPOOFCHECKER_ERROR_CODE_P(co));
8485
}
8586
if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) {
87+
intl_error_set_code(NULL, SPOOFCHECKER_ERROR_CODE(co));
8688
php_error_docref(NULL, E_WARNING, "(%d) %s", SPOOFCHECKER_ERROR_CODE(co), u_errorName(SPOOFCHECKER_ERROR_CODE(co)));
8789
RETURN_TRUE;
8890
}
@@ -355,6 +357,7 @@ U_CFUNC PHP_METHOD(Spoofchecker, areBidiConfusable)
355357
ret = uspoof_areBidiConfusableUTF8(co->uspoof, (UBiDiDirection)direction, ZSTR_VAL(s1), (int32_t)ZSTR_LEN(s1), ZSTR_VAL(s2), (int32_t)ZSTR_LEN(s2), SPOOFCHECKER_ERROR_CODE_P(co));
356358
}
357359
if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) {
360+
intl_error_set_code(NULL, SPOOFCHECKER_ERROR_CODE(co));
358361
php_error_docref(NULL, E_WARNING, "(%d) %s", SPOOFCHECKER_ERROR_CODE(co), u_errorName(SPOOFCHECKER_ERROR_CODE(co)));
359362
RETURN_TRUE;
360363
}

0 commit comments

Comments
 (0)