Use FuzzedDataProvider to generate these inputs. You MUST declare it in LLVMFuzzerTestOneInput, like this: FuzzedDataProvider stream(data, size); Include #include in the solution. This code shows example of using it: // Extract integral values int int_arg = stream.ConsumeIntegral(); int int_arg_in_range = stream.ConsumeIntegralInRange(-100, 100); bool bool_arg = stream.ConsumeBool(); // Extract floating point values float probability = stream.ConsumeProbability(); double double_arg = stream.ConsumeFloatingPoint(); double double_arg_in_range = stream.ConsumeFloatingPointInRange(-1.0, 1.0); // Extract value from predefined set, such as enum or array EnumType enum = stream.ConsumeEnum(); int valid_values = stream.PickValueInArray({FLAG_1, FLAG_2, FLAG_3}); // Extract an array of bytes as a vector. You MUST call .data() to use result as pointer. std::vector bytes = stream.ConsumeBytes(stream.ConsumeIntegralInRange(0, max_size)); void *data_ptr = bytes.data(); std::vector bytes2 = stream.ConsumeBytes(requested_size); void *data2_ptr = bytes2.data(); // Extract a string. You MUST use .c_str() to use result as pointer std::string str = stream.ConsumeBytesAsString(stream.ConsumeIntegralInRange(0, max_size)); char *ptr = str.c_str(); std::string str2 = stream.ConsumeBytesAsString(requested_size); char *ptr2 = str2.c_str(); std::string str3 = stream.ConsumeRandomLengthString(); char *ptr3 = str3.c_str(); // Extract to user defined object struct_type_t obj; size_t consumed = stream.ConsumeData(&obj, sizeof(obj)); There MUST be AT MOST ONE call to ConsumeRemainingBytes to consume remaining input! FuzzedDataProvider stream(data, size); std::vector bytes3 = stream.ConsumeRemainingBytes(); void *data3_ptr = bytes3.data();