ICU-22716 Add MessageFormat fuzzer

ICU-22716 improve
This commit is contained in:
Frank Tang 2024-09-09 17:08:01 -07:00 committed by Frank Yung-Fong Tang
parent 37b41495d7
commit 266a2b8de2
2 changed files with 39 additions and 0 deletions

View file

@ -43,6 +43,7 @@ FUZZER_TARGETS = \
dtfmtsym_fuzzer \
list_format_fuzzer locale_fuzzer \
locale_morph_fuzzer \
message_formatter_fuzzer \
normalizer2_fuzzer \
number_format_fuzzer \
number_formatter_fuzzer \

View file

@ -0,0 +1,38 @@
// © 2024 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
#include <cstring>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include "fuzzer_utils.h"
#include "unicode/messageformat2.h"
#include "unicode/messagepattern.h"
#include "unicode/msgfmt.h"
IcuEnvironment* env = new IcuEnvironment();
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
UParseError pe = { 0, 0, {0}, {0} };
UErrorCode status = U_ZERO_ERROR;
size_t unistr_size = size/2;
std::unique_ptr<char16_t[]> fuzzbuff(new char16_t[unistr_size]);
std::memcpy(fuzzbuff.get(), data, unistr_size * 2);
icu::UnicodeString fuzzstr(false, fuzzbuff.get(), unistr_size);
icu::MessageFormat mfmt(fuzzstr, status);
status = U_ZERO_ERROR;
icu::MessagePattern mpat(fuzzstr, &pe, status);
pe = { 0, 0, {0}, {0} };
status = U_ZERO_ERROR;
icu::message2::MessageFormatter msgfmt2 =
icu::message2::MessageFormatter::Builder(status)
.setPattern(fuzzstr, pe, status)
.build(status);
return 0;
}