mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-10 07:39:16 +00:00
ICU-22890 MF2: Add ICU4C test for lone surrogates
Add a test to ICU4C for handling of lone surrogates. Incidentally fix uninitialized-memory bug in MessageFormatter (initialize `errors` to nullptr) Co-authored-by: Frank Tang <ftang@chromium.org>
This commit is contained in:
parent
23edf9cca6
commit
5991c9392c
2 changed files with 32 additions and 0 deletions
icu4c/source/test/intltest
|
@ -31,6 +31,8 @@ TestMessageFormat2::runIndexedTest(int32_t index, UBool exec,
|
|||
TESTCASE_AUTO(testAPISimple);
|
||||
TESTCASE_AUTO(testDataModelAPI);
|
||||
TESTCASE_AUTO(testFormatterAPI);
|
||||
TESTCASE_AUTO(testHighLoneSurrogate);
|
||||
TESTCASE_AUTO(testLowLoneSurrogate);
|
||||
TESTCASE_AUTO(dataDrivenTests);
|
||||
TESTCASE_AUTO_END;
|
||||
}
|
||||
|
@ -337,6 +339,34 @@ 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);
|
||||
UnicodeString result = msgfmt1.formatToString({}, errorCode);
|
||||
errorCode.expectErrorAndReset(U_MF_SYNTAX_ERROR, "testHighLoneSurrogate");
|
||||
}
|
||||
|
||||
// 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);
|
||||
UnicodeString result = msgfmt2.formatToString({}, errorCode);
|
||||
errorCode.expectErrorAndReset(U_MF_SYNTAX_ERROR, "testLowLoneSurrogate");
|
||||
}
|
||||
|
||||
void TestMessageFormat2::dataDrivenTests() {
|
||||
IcuTestErrorCode errorCode(*this, "jsonTests");
|
||||
|
||||
|
|
|
@ -89,6 +89,8 @@ private:
|
|||
void testMessageFormatDateTimeSkeleton(message2::TestCase::Builder&, IcuTestErrorCode&);
|
||||
void testMf1Behavior(message2::TestCase::Builder&, IcuTestErrorCode&);
|
||||
|
||||
void testHighLoneSurrogate(void);
|
||||
void testLowLoneSurrogate(void);
|
||||
}; // class TestMessageFormat2
|
||||
|
||||
U_NAMESPACE_BEGIN
|
||||
|
|
Loading…
Add table
Reference in a new issue