1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 3 #include <stddef.h> 4 #include <stdint.h> 5 #include <memory> 6 #include "third_party/icu/fuzzers/fuzzer_utils.h" 7 #include "third_party/icu/source/common/unicode/brkiter.h" 8 9 IcuEnvironment* env = new IcuEnvironment(); 10 11 // Entry point for LibFuzzer. LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)12extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { 13 UErrorCode status = U_ZERO_ERROR; 14 icu::UnicodeString str(UnicodeStringFromUtf32(data, size)); 15 16 auto rng = CreateRng(data, size); 17 const icu::Locale& locale = GetRandomLocale(&rng); 18 19 std::unique_ptr<icu::BreakIterator> bi; 20 21 switch (rng() % 5) { 22 case 0: 23 bi.reset(icu::BreakIterator::createWordInstance(locale, status)); 24 break; 25 case 1: 26 bi.reset(icu::BreakIterator::createLineInstance(locale, status)); 27 break; 28 case 2: 29 bi.reset(icu::BreakIterator::createCharacterInstance(locale, status)); 30 break; 31 case 3: 32 bi.reset(icu::BreakIterator::createSentenceInstance(locale, status)); 33 break; 34 case 4: 35 bi.reset(icu::BreakIterator::createTitleInstance(locale, status)); 36 break; 37 } 38 if (U_FAILURE(status)) 39 return 0; 40 bi->setText(str); 41 42 for (int32_t p = bi->first(); p != icu::BreakIterator::DONE; p = bi->next()) 43 if (U_FAILURE(status)) 44 return 0; 45 46 return 0; 47 } 48