mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-13 08:53:20 +00:00
ICU-22509 Fix the RelativeDateFormat to reject unsupported dateStyle
This commit is contained in:
parent
f4227f5d54
commit
87d606c39a
2 changed files with 26 additions and 3 deletions
|
@ -78,6 +78,14 @@ RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatS
|
|||
if(U_FAILURE(status) ) {
|
||||
return;
|
||||
}
|
||||
if (dateStyle != UDAT_FULL_RELATIVE &&
|
||||
dateStyle != UDAT_LONG_RELATIVE &&
|
||||
dateStyle != UDAT_MEDIUM_RELATIVE &&
|
||||
dateStyle != UDAT_SHORT_RELATIVE &&
|
||||
dateStyle != UDAT_RELATIVE) {
|
||||
status = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
if (timeStyle < UDAT_NONE || timeStyle > UDAT_SHORT) {
|
||||
// don't support other time styles (e.g. relative styles), for now
|
||||
|
|
|
@ -31,19 +31,29 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
|||
};
|
||||
int32_t numStyles = sizeof(styles) / sizeof(icu::DateFormat::EStyle);
|
||||
|
||||
if (size < sizeof(rnd) + sizeof(date) + 2*sizeof(rnd2)) return 0;
|
||||
icu::DateFormat::EStyle dateStyle;
|
||||
icu::DateFormat::EStyle timeStyle;
|
||||
if (size < sizeof(rnd) + sizeof(date) + 2*sizeof(rnd2) +
|
||||
sizeof(dateStyle) + sizeof(timeStyle) ) {
|
||||
return 0;
|
||||
}
|
||||
icu::StringPiece fuzzData(reinterpret_cast<const char *>(data), size);
|
||||
|
||||
std::memcpy(&rnd, fuzzData.data(), sizeof(rnd));
|
||||
fuzzData.remove_prefix(sizeof(rnd));
|
||||
icu::Locale locale = GetRandomLocale(rnd);
|
||||
|
||||
std::memcpy(&dateStyle, fuzzData.data(), sizeof(dateStyle));
|
||||
fuzzData.remove_prefix(sizeof(dateStyle));
|
||||
std::memcpy(&timeStyle, fuzzData.data(), sizeof(timeStyle));
|
||||
fuzzData.remove_prefix(sizeof(timeStyle));
|
||||
|
||||
std::memcpy(&rnd2, fuzzData.data(), sizeof(rnd2));
|
||||
icu::DateFormat::EStyle dateStyle = styles[rnd2 % numStyles];
|
||||
icu::DateFormat::EStyle dateStyle2 = styles[rnd2 % numStyles];
|
||||
fuzzData.remove_prefix(sizeof(rnd2));
|
||||
|
||||
std::memcpy(&rnd2, fuzzData.data(), sizeof(rnd2));
|
||||
icu::DateFormat::EStyle timeStyle = styles[rnd2 % numStyles];
|
||||
icu::DateFormat::EStyle timeStyle2 = styles[rnd2 % numStyles];
|
||||
fuzzData.remove_prefix(sizeof(rnd2));
|
||||
|
||||
std::memcpy(&date, fuzzData.data(), sizeof(date));
|
||||
|
@ -53,6 +63,11 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
|||
icu::DateFormat::createDateTimeInstance(dateStyle, timeStyle, locale));
|
||||
icu::UnicodeString appendTo;
|
||||
df->format(date, appendTo);
|
||||
|
||||
df.reset(
|
||||
icu::DateFormat::createDateTimeInstance(dateStyle2, timeStyle2, locale));
|
||||
appendTo.remove();
|
||||
df->format(date, appendTo);
|
||||
icu::UnicodeString skeleton = icu::UnicodeString::fromUTF8(fuzzData);
|
||||
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
|
|
Loading…
Add table
Reference in a new issue