diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index 659f5cf5cbb..13343c20120 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -55,6 +55,21 @@ bool leak_check = true; static void dont_log(gpr_log_func_args *args) {} +//////////////////////////////////////////////////////////////////////////////// +// global state + +static gpr_timespec g_now; +static grpc_server *g_server; +static grpc_channel *g_channel; +static grpc_resource_quota *g_resource_quota; + +extern gpr_timespec (*gpr_now_impl)(gpr_clock_type clock_type); + +static gpr_timespec now_impl(gpr_clock_type clock_type) { + GPR_ASSERT(clock_type != GPR_TIMESPAN); + return g_now; +} + //////////////////////////////////////////////////////////////////////////////// // input_stream: allows easy access to input bytes, and allows reading a little // past the end (avoiding needing to check everywhere) @@ -150,13 +165,27 @@ static grpc_channel_args *read_args(input_stream *inp) { size_t n = next_byte(inp); grpc_arg *args = gpr_malloc(sizeof(*args) * n); for (size_t i = 0; i < n; i++) { - bool is_string = next_byte(inp) & 1; - args[i].type = is_string ? GRPC_ARG_STRING : GRPC_ARG_INTEGER; - args[i].key = read_string(inp); - if (is_string) { - args[i].value.string = read_string(inp); - } else { - args[i].value.integer = read_int(inp); + switch (next_byte(inp)) { + case 1: + args[i].type = GRPC_ARG_STRING; + args[i].key = read_string(inp); + args[i].value.string = read_string(inp); + break; + case 2: + args[i].type = GRPC_ARG_INTEGER; + args[i].key = read_string(inp); + args[i].value.integer = read_int(inp); + break; + case 3: + args[i].type = GRPC_ARG_POINTER; + args[i].key = GRPC_ARG_RESOURCE_QUOTA; + args[i].value.pointer.vtable = grpc_resource_quota_arg_vtable(); + args[i].value.pointer.p = g_resource_quota; + break; + default: + end(inp); + n = i; + break; } } grpc_channel_args *a = gpr_malloc(sizeof(*a)); @@ -167,21 +196,6 @@ static grpc_channel_args *read_args(input_stream *inp) { static bool is_eof(input_stream *inp) { return inp->cur == inp->end; } -//////////////////////////////////////////////////////////////////////////////// -// global state - -static gpr_timespec g_now; -static grpc_server *g_server; -static grpc_channel *g_channel; -static grpc_resource_quota *g_resource_quota; - -extern gpr_timespec (*gpr_now_impl)(gpr_clock_type clock_type); - -static gpr_timespec now_impl(gpr_clock_type clock_type) { - GPR_ASSERT(clock_type != GPR_TIMESPAN); - return g_now; -} - //////////////////////////////////////////////////////////////////////////////// // dns resolution