1*5c90c05cSAndroid Build Coastguard Worker // Copyright (c) 2021, Paul Dreik 2*5c90c05cSAndroid Build Coastguard Worker // For license information refer to format.h. 3*5c90c05cSAndroid Build Coastguard Worker #include <fmt/chrono.h> 4*5c90c05cSAndroid Build Coastguard Worker 5*5c90c05cSAndroid Build Coastguard Worker #include "fuzzer-common.h" 6*5c90c05cSAndroid Build Coastguard Worker 7*5c90c05cSAndroid Build Coastguard Worker /* 8*5c90c05cSAndroid Build Coastguard Worker * a fuzzer for the chrono timepoints formatters 9*5c90c05cSAndroid Build Coastguard Worker * C is a clock (std::chrono::system_clock etc) 10*5c90c05cSAndroid Build Coastguard Worker */ doit(const uint8_t * data,size_t size)11*5c90c05cSAndroid Build Coastguard Workertemplate <typename C> void doit(const uint8_t* data, size_t size) { 12*5c90c05cSAndroid Build Coastguard Worker using Rep = typename C::time_point::rep; 13*5c90c05cSAndroid Build Coastguard Worker constexpr auto N = sizeof(Rep); 14*5c90c05cSAndroid Build Coastguard Worker if (size < N) return; 15*5c90c05cSAndroid Build Coastguard Worker 16*5c90c05cSAndroid Build Coastguard Worker const auto x = assign_from_buf<Rep>(data); 17*5c90c05cSAndroid Build Coastguard Worker typename C::duration dur{x}; 18*5c90c05cSAndroid Build Coastguard Worker typename C::time_point timepoint{dur}; 19*5c90c05cSAndroid Build Coastguard Worker data += N; 20*5c90c05cSAndroid Build Coastguard Worker size -= N; 21*5c90c05cSAndroid Build Coastguard Worker data_to_string format_str(data, size); 22*5c90c05cSAndroid Build Coastguard Worker 23*5c90c05cSAndroid Build Coastguard Worker std::string message = fmt::format(format_str.get(), timepoint); 24*5c90c05cSAndroid Build Coastguard Worker } 25*5c90c05cSAndroid Build Coastguard Worker LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)26*5c90c05cSAndroid Build Coastguard Workerextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { 27*5c90c05cSAndroid Build Coastguard Worker try { 28*5c90c05cSAndroid Build Coastguard Worker doit<std::chrono::system_clock>(data, size); 29*5c90c05cSAndroid Build Coastguard Worker } catch (...) { 30*5c90c05cSAndroid Build Coastguard Worker } 31*5c90c05cSAndroid Build Coastguard Worker return 0; 32*5c90c05cSAndroid Build Coastguard Worker } 33