//===-- printf_parser_fuzz.cpp --------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// Fuzzing test for llvm-libc qsort implementation.
///
//===----------------------------------------------------------------------===//

#include "src/__support/arg_list.h"
#include "src/__support/printf_core/parser.h"

#include <stdarg.h>
#include <stdint.h>

using namespace LIBC_NAMESPACE;

// The design for the printf parser fuzzer is fairly simple. The parser uses a
// mock arg list that will never fail, and is passed a randomized string. The
// format sections it outputs are checked against a count of the number of '%'
// signs are in the original string. This is a fairly basic test, and the main
// intent is to run this under sanitizers, which will check for buffer overruns.
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  char *in_str = new char[size + 1];

  for (size_t i = 0; i < size; ++i)
    in_str[i] = data[i];

  in_str[size] = '\0';

  auto mock_arg_list = internal::MockArgList();

  auto parser =
      printf_core::Parser<internal::MockArgList>(in_str, mock_arg_list);

  int str_percent_count = 0;

  for (size_t i = 0; i < size && in_str[i] != '\0'; ++i) {
    if (in_str[i] == '%') {
      ++str_percent_count;
    }
  }

  int section_percent_count = 0;

  for (printf_core::FormatSection cur_section = parser.get_next_section();
       !cur_section.raw_string.empty();
       cur_section = parser.get_next_section()) {
    if (cur_section.has_conv) {
      ++section_percent_count;
      if (cur_section.conv_name == '%') {
        ++section_percent_count;
      }
    } else if (cur_section.raw_string[0] == '%') {
      // If the conversion would be undefined, it's instead raw, but it still
      // starts with a %.
      ++section_percent_count;
    }
  }

  if (str_percent_count != section_percent_count) {
    __builtin_trap();
  }

  delete[] in_str;
  return 0;
}
