Commit 23f97cab authored by Jun Choi's avatar Jun Choi Committed by Commit Bot

Add ICU integration for fuzzer test

Initialize ICU to ICU data file during fuzzing. This is a fix for CHECK
failure caused during clusterfuzz testing.

Bug: 808412
Change-Id: Ied129095f1650a97a7767b7dde8ea2084b9ceb2f
Reviewed-on: https://chromium-review.googlesource.com/902583Reviewed-by: default avatarJungshik Shin <jshin@chromium.org>
Reviewed-by: default avatarJan Wilken Dörrie <jdoerrie@chromium.org>
Reviewed-by: default avatarKim Paulhamus <kpaulhamus@chromium.org>
Commit-Queue: Jun Choi <hongjunchoi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#535909}
parent 1d2aa0f1
...@@ -205,6 +205,8 @@ fuzzer_test("ctap_response_fuzzer") { ...@@ -205,6 +205,8 @@ fuzzer_test("ctap_response_fuzzer") {
] ]
deps = [ deps = [
":fido", ":fido",
"//base",
"//base:i18n",
] ]
seed_corpus = "ctap_response_fuzzer_corpus/" seed_corpus = "ctap_response_fuzzer_corpus/"
libfuzzer_options = [ "max_len=65537" ] libfuzzer_options = [ "max_len=65537" ]
......
...@@ -8,12 +8,28 @@ ...@@ -8,12 +8,28 @@
#include <algorithm> #include <algorithm>
#include <vector> #include <vector>
#include "base/at_exit.h"
#include "base/i18n/icu_util.h"
#include "device/fido/authenticator_get_assertion_response.h" #include "device/fido/authenticator_get_assertion_response.h"
#include "device/fido/authenticator_get_info_response.h" #include "device/fido/authenticator_get_info_response.h"
#include "device/fido/authenticator_make_credential_response.h" #include "device/fido/authenticator_make_credential_response.h"
#include "device/fido/ctap_constants.h" #include "device/fido/ctap_constants.h"
#include "device/fido/device_response_converter.h" #include "device/fido/device_response_converter.h"
namespace device {
// Creating a PublicKeyCredentialUserEntity from a CBOR value can involve URL
// parsing, which relies on ICU for IDN handling. This is why ICU needs to be
// initialized explicitly.
// See: http://crbug/808412
struct IcuEnvironment {
IcuEnvironment() { CHECK(base::i18n::InitializeICU()); }
// Used by ICU integration.
base::AtExitManager at_exit_manager;
};
IcuEnvironment* env = new IcuEnvironment();
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
std::vector<uint8_t> input(data, data + size); std::vector<uint8_t> input(data, data + size);
device::ReadCTAPMakeCredentialResponse( device::ReadCTAPMakeCredentialResponse(
...@@ -25,3 +41,5 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { ...@@ -25,3 +41,5 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
return 0; return 0;
} }
} // namespace device
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment