17 template <
typename... Args>
28 const int digits_in_format_specifier = std::count_if(format_string.begin(), format_string.end(),
IsDigit);
37 if (format_string.find(
'%') != std::string::npos && digits_in_format_specifier >= 7) {
45 if (format_string.find(
'%') != std::string::npos && format_string.find(
'$') != std::string::npos && format_string.find(
'*') != std::string::npos && digits_in_format_specifier > 0) {
60 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeRandomLengthString(32));
63 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeRandomLengthString(32).c_str());
66 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<
signed char>());
69 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<
unsigned char>());
72 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<
char>());
75 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeBool());
80 if (format_string.find(
'%') != std::string::npos && format_string.find(
'c') != std::string::npos) {
87 if (format_string.find(
'%') != std::string::npos && format_string.find(
'*') != std::string::npos) {
100 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeFloatingPoint<
float>());
103 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeFloatingPoint<
double>());
106 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<int16_t>());
109 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<uint16_t>());
112 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<int32_t>());
115 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<uint32_t>());
118 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<int64_t>());
121 fuzz_fmt(format_string, fuzzed_data_provider.ConsumeIntegral<uint64_t>());
constexpr bool IsDigit(char c)
Tests if the given character is a decimal digit.
std::string ConsumeRandomLengthString(size_t max_length)
void fuzz_fmt(const std::string &fmt, const Args &... args)
size_t CallOneOf(FuzzedDataProvider &fuzzed_data_provider, Callables... callables)