]>
git.saurik.com Git - apple/icu.git/blob - icuSources/test/fuzzer/locale_fuzzer.cc
1 // © 2019 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
4 // Fuzzer for ICU Locales.
13 #include "unicode/locid.h"
17 void ConsumeNBytes(const uint8_t** data
, size_t* size
, size_t N
) {
22 uint8_t ConsumeUint8(const uint8_t** data
, size_t* size
) {
26 ConsumeNBytes(data
, size
, 1);
31 std::string
ConsumeSubstring(const uint8_t** data
, size_t* size
) {
32 const size_t request_size
= ConsumeUint8(data
, size
);
33 const char* substring_start
= reinterpret_cast<const char*>(*data
);
34 const size_t substring_size
= std::min(*size
, request_size
);
35 ConsumeNBytes(data
, size
, substring_size
);
36 return std::string(substring_start
, substring_size
);
41 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data
, size_t size
) {
42 const std::string language
= ConsumeSubstring(&data
, &size
);
43 const std::string country
= ConsumeSubstring(&data
, &size
);
44 const std::string variant
= ConsumeSubstring(&data
, &size
);
45 const std::string kv_pairs
= ConsumeSubstring(&data
, &size
);
46 icu::Locale
locale(language
.c_str(), country
.c_str(), variant
.c_str(),