4 #ifndef FUZZER_COMMON_H 5 #define FUZZER_COMMON_H 17 #define FMT_FUZZ_FORMAT_TO_STRING 0 22 #define FMT_FUZZ_SEPARATE_ALLOCATION 1 28 constexpr
auto fixed_size = 16;
31 template <
typename T>
inline const char* as_chars(
const T* data) {
32 return reinterpret_cast<const char*
>(data);
36 template <
typename T>
inline const std::uint8_t* as_bytes(
const T* data) {
37 return reinterpret_cast<const std::uint8_t*
>(data);
42 template <
class Item>
inline Item assign_from_buf(
const std::uint8_t* data) {
44 std::memcpy(&item, data,
sizeof(Item));
49 template <>
inline bool assign_from_buf<bool>(
const std::uint8_t* data) {
53 struct data_to_string {
54 #if FMT_FUZZ_SEPARATE_ALLOCATION 55 std::vector<char> buffer;
57 data_to_string(
const uint8_t* data,
size_t size,
bool add_terminator =
false)
58 : buffer(size + (add_terminator ? 1 : 0)) {
60 std::memcpy(buffer.data(), data, size);
64 fmt::string_view
get()
const {
return {buffer.data(), buffer.size()}; }
68 data_to_string(
const uint8_t* data,
size_t size,
bool =
false)
69 : str(as_chars(data), size) {}
71 fmt::string_view
get()
const {
return sv; }
74 const char* data()
const {
return get().data(); }
77 #endif // FUZZER_COMMON_H