mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-07 22:44:49 +00:00
ICU-22716 Add uregex_match_fuzzer
Based on https://chromium-review.googlesource.com/c/chromium/deps/icu/+/5465572
This commit is contained in:
parent
0ea487a58b
commit
e5b8660a46
2 changed files with 37 additions and 0 deletions
|
@ -61,6 +61,7 @@ FUZZER_TARGETS = \
|
|||
unicode_string_codepage_create_fuzzer \
|
||||
uprop_fuzzer \
|
||||
uregex_open_fuzzer \
|
||||
uregex_match_fuzzer \
|
||||
|
||||
|
||||
OBJECTS = $(FUZZER_TARGETS:%=%.o)
|
||||
|
|
36
icu4c/source/test/fuzzer/uregex_match_fuzzer.cpp
Normal file
36
icu4c/source/test/fuzzer/uregex_match_fuzzer.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
// © 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/regex.h"
|
||||
|
||||
IcuEnvironment* env = new IcuEnvironment();
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
UParseError pe = { 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::UnicodeString regex = fuzzstr.tempSubString (0, fuzzstr.length() / 4);
|
||||
icu::UnicodeString haystack = fuzzstr.tempSubString (regex.length());
|
||||
|
||||
std::unique_ptr<icu::RegexPattern> re(icu::RegexPattern::compile(regex, UREGEX_CASE_INSENSITIVE, status));
|
||||
if (U_FAILURE(status)) {
|
||||
return -1; // invalid regex, don't explore further
|
||||
}
|
||||
std::unique_ptr<icu::RegexMatcher> regex_matcher(re->matcher(haystack, status));
|
||||
if (U_SUCCESS(status)) {
|
||||
regex_matcher->find(0, status);
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue