Extend fuzzers (correctly) to deal with permissive/strict encoding

pull/7774/head
Craig Tiller 9 years ago
parent 1c7a84202f
commit 016493ed59
  1. 7
      test/core/support/percent_decode_fuzzer.c
  2. 6
      test/core/support/percent_encode_fuzzer.c

@ -49,12 +49,15 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
grpc_memory_counters_init();
gpr_slice input = gpr_slice_from_copied_buffer((const char *)data, size);
gpr_slice output;
if (gpr_percent_decode_slice(input, false, &output)) {
if (gpr_strict_percent_decode_slice(
input, gpr_url_percent_encoding_unreserved_bytes, &output)) {
gpr_slice_unref(output);
}
if (gpr_percent_decode_slice(input, true, &output)) {
if (gpr_percent_decode_slice(
input, gpr_compatible_percent_encoding_unreserved_bytes, &output)) {
gpr_slice_unref(output);
}
gpr_slice_unref(gpr_permissive_percent_decode_slice(input));
gpr_slice_unref(input);
counters = grpc_memory_counters_snapshot();
grpc_memory_counters_destroy();

@ -51,12 +51,16 @@ static void test(const uint8_t *data, size_t size, const uint8_t *dict) {
gpr_slice output = gpr_percent_encode_slice(input, dict);
gpr_slice decoded_output;
// encoder must always produce decodable output
GPR_ASSERT(gpr_percent_decode_slice(output, false, &decoded_output));
GPR_ASSERT(gpr_strict_percent_decode_slice(output, dict, &decoded_output));
gpr_slice permissive_decoded_output =
gpr_permissive_percent_decode_slice(output);
// and decoded output must always match the input
GPR_ASSERT(gpr_slice_cmp(input, decoded_output) == 0);
GPR_ASSERT(gpr_slice_cmp(input, permissive_decoded_output) == 0);
gpr_slice_unref(input);
gpr_slice_unref(output);
gpr_slice_unref(decoded_output);
gpr_slice_unref(permissive_decoded_output);
counters = grpc_memory_counters_snapshot();
grpc_memory_counters_destroy();
GPR_ASSERT(counters.total_size_relative == 0);

Loading…
Cancel
Save