Index: fuzzers/icu_unicode_string_codepage_create_fuzzer.cc |
diff --git a/fuzzers/icu_unicode_string_codepage_create_fuzzer.cc b/fuzzers/icu_unicode_string_codepage_create_fuzzer.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..700462967de4aa99168f246aaa2eb256c78f1da1 |
--- /dev/null |
+++ b/fuzzers/icu_unicode_string_codepage_create_fuzzer.cc |
@@ -0,0 +1,72 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <stddef.h> |
+#include <stdint.h> |
+ |
+#include <algorithm> |
+#include <array> |
+#include <vector> |
+ |
+#include "third_party/icu/source/common/unicode/unistr.h" |
+#include "third_party/icu/fuzzers/fuzzer_utils.h" |
+ |
+// Taken from third_party/icu/source/data/mappings/convrtrs.txt file. |
+static const std::array<const char*, 45> kConverters = { |
+ { |
+ "UTF-8", |
+ "utf-16be", |
+ "utf-16le", |
+ "UTF-32", |
+ "UTF-32BE", |
+ "UTF-32LE", |
+ "ibm866-html", |
+ "iso-8859-2-html", |
+ "iso-8859-3-html", |
+ "iso-8859-4-html", |
+ "iso-8859-5-html", |
+ "iso-8859-6-html", |
+ "iso-8859-7-html", |
+ "iso-8859-8-html", |
+ "ISO-8859-8-I", |
+ "iso-8859-10-html", |
+ "iso-8859-13-html", |
+ "iso-8859-14-html", |
+ "iso-8859-15-html", |
+ "iso-8859-16-html", |
+ "koi8-r-html", |
+ "koi8-u-html", |
+ "macintosh-html", |
+ "windows-874-html", |
+ "windows-1250-html", |
+ "windows-1251-html", |
+ "windows-1252-html", |
+ "windows-1253-html", |
+ "windows-1254-html", |
+ "windows-1255-html", |
+ "windows-1256-html", |
+ "windows-1257-html", |
+ "windows-1258-html", |
+ "x-mac-cyrillic-html", |
+ "windows-936-2000", |
+ "gb18030", |
+ "big5-html", |
+ "euc-jp-html", |
+ "ISO_2022,locale=ja,version=0", |
+ "shift_jis-html", |
+ "euc-kr-html", |
+ "ISO-2022-KR", |
+ "ISO-2022-CN", |
+ "ISO-2022-CN-EXT", |
+ "HZ-GB-2312" |
+ } |
+}; |
+ |
+// Entry point for LibFuzzer. |
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { |
+ auto rng = CreateRng(data, size); |
+ icu::UnicodeString str(reinterpret_cast<const char*>(data), size, |
+ kConverters[rng() % kConverters.size()]); |
+ return 0; |
+} |