git repos / blockattack-game

blame: source/misc/embedded_libs/fmt-8.1.1/test/fuzzing/chrono-timepoint.cc

normal view · raw

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