]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/fmt/test/fuzzing/sprintf.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / fmt / test / fuzzing / sprintf.cpp
diff --git a/ceph/src/fmt/test/fuzzing/sprintf.cpp b/ceph/src/fmt/test/fuzzing/sprintf.cpp
deleted file mode 100644 (file)
index aa02875..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2019, Paul Dreik
-// License: see LICENSE.rst in the fmt root directory
-#include <fmt/format.h>
-#include <fmt/printf.h>
-#include <cstdint>
-#include <stdexcept>
-
-#include "fuzzer_common.h"
-
-using fmt_fuzzer::Nfixed;
-
-template <typename Item1, typename Item2>
-void invoke_fmt(const uint8_t* Data, size_t Size) {
-  constexpr auto N1 = sizeof(Item1);
-  constexpr auto N2 = sizeof(Item2);
-  static_assert(N1 <= Nfixed, "size1 exceeded");
-  static_assert(N2 <= Nfixed, "size2 exceeded");
-  if (Size <= Nfixed + Nfixed) {
-    return;
-  }
-  Item1 item1 = fmt_fuzzer::assignFromBuf<Item1>(Data);
-  Data += Nfixed;
-  Size -= Nfixed;
-
-  Item2 item2 = fmt_fuzzer::assignFromBuf<Item2>(Data);
-  Data += Nfixed;
-  Size -= Nfixed;
-
-  auto fmtstring = fmt::string_view(fmt_fuzzer::as_chars(Data), Size);
-
-#if FMT_FUZZ_FORMAT_TO_STRING
-  std::string message = fmt::format(fmtstring, item1, item2);
-#else
-  fmt::memory_buffer message;
-  fmt::format_to(message, fmtstring, item1, item2);
-#endif
-}
-
-// for dynamic dispatching to an explicit instantiation
-template <typename Callback> void invoke(int index, Callback callback) {
-  switch (index) {
-  case 0:
-    callback(bool{});
-    break;
-  case 1:
-    callback(char{});
-    break;
-  case 2:
-    using sc = signed char;
-    callback(sc{});
-    break;
-  case 3:
-    using uc = unsigned char;
-    callback(uc{});
-    break;
-  case 4:
-    callback(short{});
-    break;
-  case 5:
-    using us = unsigned short;
-    callback(us{});
-    break;
-  case 6:
-    callback(int{});
-    break;
-  case 7:
-    callback(unsigned{});
-    break;
-  case 8:
-    callback(long{});
-    break;
-  case 9:
-    using ul = unsigned long;
-    callback(ul{});
-    break;
-  case 10:
-    callback(float{});
-    break;
-  case 11:
-    callback(double{});
-    break;
-  case 12:
-    using LD = long double;
-    callback(LD{});
-    break;
-  case 13:
-    using ptr = void*;
-    callback(ptr{});
-    break;
-  }
-}
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) {
-  if (Size <= 3) {
-    return 0;
-  }
-
-  // switch types depending on the first byte of the input
-  const auto first = Data[0] & 0x0F;
-  const auto second = (Data[0] & 0xF0) >> 4;
-  Data++;
-  Size--;
-
-  auto outer = [=](auto param1) {
-    auto inner = [=](auto param2) {
-      invoke_fmt<decltype(param1), decltype(param2)>(Data, Size);
-    };
-    invoke(second, inner);
-  };
-
-  try {
-    invoke(first, outer);
-  } catch (std::exception& /*e*/) {
-  }
-  return 0;
-}