Skip to content

Commit

Permalink
ICU-22890 Add test to show lone surrogate cause infinity loop
Browse files Browse the repository at this point in the history
  • Loading branch information
FrankYFTang authored and catamorphism committed Sep 18, 2024
1 parent 3205630 commit 68b5ef5
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
26 changes: 26 additions & 0 deletions icu4c/source/test/intltest/messageformat2test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ TestMessageFormat2::runIndexedTest(int32_t index, UBool exec,
TESTCASE_AUTO(testAPI);
TESTCASE_AUTO(testAPISimple);
TESTCASE_AUTO(testDataModelAPI);
TESTCASE_AUTO(testHighLoneSurrogate);
TESTCASE_AUTO(testLowLoneSurrogate);
TESTCASE_AUTO(dataDrivenTests);
TESTCASE_AUTO_END;
}
Expand Down Expand Up @@ -263,6 +265,30 @@ void TestMessageFormat2::testAPICustomFunctions() {
delete person;
}

// ICU-22890 lone surrogate cause infinity loop
void TestMessageFormat2::testHighLoneSurrogate() {
IcuTestErrorCode errorCode(*this, "testHighLoneSurrogate");
UParseError pe = { 0, 0, {0}, {0} };
// Lone surrogate with only high surrogate
UnicodeString loneSurrogate({0xda02, 0});
icu::message2::MessageFormatter msgfmt1 =
icu::message2::MessageFormatter::Builder(errorCode)
.setPattern(loneSurrogate, pe, errorCode)
.build(errorCode);
}

// ICU-22890 lone surrogate cause infinity loop
void TestMessageFormat2::testLowLoneSurrogate() {
IcuTestErrorCode errorCode(*this, "testLowLoneSurrogate");
UParseError pe = { 0, 0, {0}, {0} };
// Lone surrogate with only low surrogate
UnicodeString loneSurrogate({0xdc02, 0});
icu::message2::MessageFormatter msgfmt2 =
icu::message2::MessageFormatter::Builder(errorCode)
.setPattern(loneSurrogate, pe, errorCode)
.build(errorCode);
}

void TestMessageFormat2::dataDrivenTests() {
IcuTestErrorCode errorCode(*this, "jsonTests");

Expand Down
2 changes: 2 additions & 0 deletions icu4c/source/test/intltest/messageformat2test.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ class TestMessageFormat2: public IntlTest {
void testMessageFormatDateTimeSkeleton(message2::TestCase::Builder&, IcuTestErrorCode&);
void testMf1Behavior(message2::TestCase::Builder&, IcuTestErrorCode&);

void testHighLoneSurrogate(void);
void testLowLoneSurrogate(void);
}; // class TestMessageFormat2

U_NAMESPACE_BEGIN
Expand Down

0 comments on commit 68b5ef5

Please sign in to comment.