summaryrefslogtreecommitdiffstats
path: root/src/fmt/test/fuzzing/chrono-timepoint.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
commite6918187568dbd01842d8d1d2c808ce16a894239 (patch)
tree64f88b554b444a49f656b6c656111a145cbbaa28 /src/fmt/test/fuzzing/chrono-timepoint.cc
parentInitial commit. (diff)
downloadceph-b26c4052f3542036551aa9dec9caa4226e456195.tar.xz
ceph-b26c4052f3542036551aa9dec9caa4226e456195.zip
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/fmt/test/fuzzing/chrono-timepoint.cc')
-rw-r--r--src/fmt/test/fuzzing/chrono-timepoint.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/fmt/test/fuzzing/chrono-timepoint.cc b/src/fmt/test/fuzzing/chrono-timepoint.cc
new file mode 100644
index 000000000..8a1b24d29
--- /dev/null
+++ b/src/fmt/test/fuzzing/chrono-timepoint.cc
@@ -0,0 +1,32 @@
+// Copyright (c) 2021, Paul Dreik
+// For license information refer to format.h.
+#include <fmt/chrono.h>
+
+#include "fuzzer-common.h"
+
+/*
+ * a fuzzer for the chrono timepoints formatters
+ * C is a clock (std::chrono::system_clock etc)
+ */
+template <typename C> void doit(const uint8_t* data, size_t size) {
+ using Rep = typename C::time_point::rep;
+ constexpr auto N = sizeof(Rep);
+ if (size < N) return;
+
+ const auto x = assign_from_buf<Rep>(data);
+ typename C::duration dur{x};
+ typename C::time_point timepoint{dur};
+ data += N;
+ size -= N;
+ data_to_string format_str(data, size);
+
+ std::string message = fmt::format(format_str.get(), timepoint);
+}
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ try {
+ doit<std::chrono::system_clock>(data, size);
+ } catch (...) {
+ }
+ return 0;
+}