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