ICU-23414 Fix null pointer dereference in TransliterationRule copy constructor on allocation failure#4007
Open
UnLucky252 wants to merge 1 commit into
Open
Conversation
…nstructor on allocation failure In the TransliterationRule copy constructor, the result of uprv_malloc for the segments array was passed to uprv_memcpy without a NULL check, which is undefined behavior on OOM. The constructor has no UErrorCode, so guard the memcpy with a NULL check; segments stays nullptr on failure, which the rest of the object already tolerates. Found by static analysis (Svace, ISP RAS).
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.
Linked Jira issue
ICU-23414
Summary
In the
TransliterationRulecopy constructor (icu4c/source/i18n/rbt_rule.cpp),the result of
uprv_mallocfor thesegmentsarray was passed touprv_memcpywithout a NULL check.Cause
On OOM
uprv_mallocreturns NULL; the subsequentuprv_memcpyis thenundefined behavior.
Fix
The constructor has no
UErrorCode, so guard theuprv_memcpywith aNULL check. On failure
segmentsstaysnullptr, which the rest of theobject already tolerates.
Testing
Existing tests pass (no behavior change on the success path). No new
test added — the OOM path requires allocator injection that is not
part of the standard test harness.
Notes
Found by static analysis (Svace, ISP RAS).
Checklist