ext/intl: Expose Spoofchecker restriction-level APIs on all supported ICU versions#22055
Closed
LamentXU123 wants to merge 3 commits into
Closed
ext/intl: Expose Spoofchecker restriction-level APIs on all supported ICU versions#22055LamentXU123 wants to merge 3 commits into
LamentXU123 wants to merge 3 commits into
Conversation
devnexen
reviewed
May 16, 2026
| <?php | ||
| $r = new ReflectionClass("Spoofchecker"); | ||
|
|
||
| var_dump($r->getConstant("ASCII") !== false); |
Member
There was a problem hiding this comment.
Test asserts existence only; that's fine since spoofchecker_007.phpt covers behavior, but asserting the constants are distinct integers would also catch a future
fallback collision.
Contributor
Author
There was a problem hiding this comment.
Added. I don't sure if this time my test is a little bit too verbose
devnexen
approved these changes
May 17, 2026
pull Bot
pushed a commit
to ppker/php-src
that referenced
this pull request
May 17, 2026
… ICU versions Also fix the constant names referenced in the Spoofchecker::setAllowedChars() error message (CASE_INSENSITIVE / ADD_CASE_MAPPINGS / SIMPLE_CASE_INSENSITIVE rather than their USET_-prefixed counterparts). Fix php#22053 close phpGH-22055
GrahamCampbell
added a commit
to GrahamCampbell/php-src
that referenced
this pull request
Jun 7, 2026
PHP 8.4.22 fails to build the intl extension against ICU 50.x. The change that landed for phpGH-22055 removed the U_ICU_VERSION_MAJOR_NUM >= 58 guards around the Spoofchecker restriction-level constants (ASCII, HIGHLY_RESTRICTIVE, MODERATELY_RESTRICTIVE, MINIMALLY_RESTRICTIVE, UNRESTRICTIVE, SINGLE_SCRIPT_RESTRICTIVE and MIXED_NUMBERS) and the setRestrictionLevel() method, so the extension references those ICU symbols unconditionally. That is fine on master and PHP-8.5, where build/php.m4 requires icu-uc >= 57.1, but on PHP-8.4 the minimum is still icu-uc >= 50.1 and the symbols do not exist that far back. On a system with ICU 50.x such as Amazon Linux 2 (ICU 50.2, which satisfies the 50.1 requirement) configure succeeds and the compile then fails with USPOOF_ASCII, the other restriction-level constants and URestrictionLevel undeclared. The correct floor is ICU 53: these symbols, URestrictionLevel and uspoof_setRestrictionLevel() exist since ICU 51, except USPOOF_SINGLE_SCRIPT_RESTRICTIVE which was added in ICU 53 and is referenced both as a constant and in the setRestrictionLevel() body. Guarding at ICU 53 restores the build on every ICU version PHP-8.4 supports while keeping the restriction-level API exposed on ICU 53 and later, preserving the intent of phpGH-22055 (the previous >= 58 guard was too strict and hid the API on ICU 57.x).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Those constants (functions) are made out of the version guard of ICU >= 58 in this PR.
Fixes #22053