aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core/end2end
diff options
context:
space:
mode:
Diffstat (limited to 'test/core/end2end')
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer.c888
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/00.binbin0 -> 1 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/01.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/02.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/03.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/04.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0452ea591951af85724608917fda16926dad7451bin0 -> 24 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/05.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/06.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/07.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/07ae5ed3dedbd83e376c892a9546cc0cd733c26fbin0 -> 25 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/08.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/09.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0a.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0b.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0c.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0d.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0d9d8241c5568fea586d21f91ae1891dac31ba24bin0 -> 60 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0e.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/0f.bin1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/130c41e2dd87c36b4079c8e5bd380dbe3e0a2b38bin0 -> 64 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/15c37fe5be9f23c0f0e59e12ee7666007acdb3c5bin0 -> 126 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/1661d0799cbf2015fd64e9f648ebb49281d41c6dbin0 -> 24 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/17cfb281eaa8a17d77e08c3648bb93f3b5aa5297bin0 -> 129 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/1a6b907bfa02ceebeb80aab47b3c3c51161eb868bin0 -> 20 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/20322515ebf6df572cb2f596d8a20d3d8893193dbin0 -> 70 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/2099db589f606dd8932a950280f5d2b23751af9fbin0 -> 129 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/2743ee5a764fb0c4e04cdf84c9b3810ac80939981
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/2942908b7973da7113098a0ea25487e3372db173bin0 -> 22 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/2ab009994e603404e194ebe0120840d388fb765ebin0 -> 82 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/313001e1cc15ef9887b43e0c6de398eea2f20e00bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/31429d04a34cc6643eebed7eeb8a807a83b57b1fbin0 -> 146 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/32594aaa716c1a04b0f927ef964f1593735cb289bin0 -> 47 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/3a287590e2d38d5dbc0b85d29ae2497d27aa0305bin0 -> 121 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/3a4fa4e81b78cae093b2d53b0a6f272a398a7cdabin0 -> 60 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/3c84d21c46b89e7573750dd4517ea2eb58e37e27bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/3c8e6352f6c2a07bd5ef2b9a93c103935c8eaf0dbin0 -> 62 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/3f36ae935255c4bbd2bd8d4a85bfa92bba02225cbin0 -> 20 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/439d4e4ed3ab9fe77e2bbda5b2be3d123beefa00bin0 -> 64 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/441c94c010d19206c337d3c850cc449523ab480dbin0 -> 46 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/449ece0109a8543f26311f3ddc23525a2f288b64bin0 -> 37 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/44e1fdcc46db56bf61a6702fd10766b56d35bc74bin0 -> 122 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/47ecf4079ea23d4de5fd9282f733eb5429f7ab051
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/4c686a41d4d2226b3cc76b8154d8df090d075f00bin0 -> 19 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/5298ce28a7eab28c99964c0d838b017355607c92bin0 -> 66 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/5a6491ab9c23fae58967d4a4b5d5cfb23f620001bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/5a8ca84c7d4d9b055f05c55b1f707f223979d3871
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/5d2f29b31d78b47077b15779d620747034d18c05bin0 -> 25 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/5ea01efbec747fc55ae29eb2b779f00889ca6922bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/6184ea16753b0827f728285f18dad4b3bde00024bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/6230cce2862a18c4c92dc6fb4e034a1d15e1ff18bin0 -> 62 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/62fbfe90a1b9ac471bc2644c896f64515f6b3c7ebin0 -> 24 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/638c36cfe098b98008e594eddf90fdacfc078faebin0 -> 34 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/682cb8ad9fe4641e7a140ae3d3ee27c841ba397fbin0 -> 19 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/696ea30e2e1490f2f31b153641b2c29152ded5c2bin0 -> 64 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/6c1c2177f3483086607c717d0c6c35a81d79e18ebin0 -> 20 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/6f8ffc96f9ebe390929165e32bdc187afb7a40cebin0 -> 48 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/7462e4d1834938e8a5fb975da6865cc7d6b225f3bin0 -> 21 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/74eef5817db3984a020b2868f3c9979d0220c829bin0 -> 130 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/761f683f6486e3efb606bf08fa527a4c1a51f302bin0 -> 87 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/768b6302130ac824947f956e062184afaafcdbabbin0 -> 24 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/7c026422a34cb34de673a1d6702cbde67d112d27bin0 -> 45 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/7c9b4e2ea03542254235893edd042a822145e504bin0 -> 45 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/7d33039255c9611d0e9e0cc7e230f87ad55c007fbin0 -> 18 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/80a249d17248e0dc7dcc9fb64d8ac2dd0320a544bin0 -> 48 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8123e9dc4d43115412f07fcf9946c99d9a1a55c3bin0 -> 167 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8492f54a92f9a2a05af1a078489a3a68145d8985bin0 -> 79 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8791b58ad0dbfdf9c37d48bc60940f86c6c7e3b4bin0 -> 98 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/880070b48f04fd1c8ffafd750e1c4d37ff404c6cbin0 -> 21 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8a9f7329b30a562837353767313df7fa9a1f31f7bin0 -> 85 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8b253ba946d6768c147f5d52552e150b703437e0bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8b53f252f8558726dc0daaee84e2b4d2f0835f44bin0 -> 57 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8d7bb385d6b13b0e689a1e81e29113746218ba99bin0 -> 121 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/8f43b11f10961dcce8eaa8340c96d10bdbc937adbin0 -> 64 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/9a0de0d63d44e00fc88e6cb88f4b8665db3b4b5ebin0 -> 19 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/9bfd723bfa4162bb5801a6050af0a8b2db10d4abbin0 -> 21 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/9c837f4e6cb572b3431b3a5065b889273712810ebin0 -> 64 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/a1b153e4cde45a7302094f6c751e3248d2f0fb8ebin0 -> 21 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/a3c9b6e89b534d02bdad07207c4fdcda536f28a4bin0 -> 24 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/aabcb4ea803e0b5399cb7a2cca8d28baa3f6c4aebin0 -> 61 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/b0ff62377b87b846f720a70f0b7f7bdc76aa1315bin0 -> 46 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/b33f833f291ebba4d777c2bae51193553c27d138bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/b77ca0306f700c8c88854e73ccbdf470fba3f820bin0 -> 57 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/bad.binbin0 -> 19 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/bb349c691efa909b4c5412b9210e1acf4a4b7505bin0 -> 65 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/bc7f0b79a1781772d7f48e168462f99da27b03e2bin0 -> 68 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/be40890ee61e101a7429d53cd9ffd59ee600e0f6bin0 -> 34 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/bef8cedf1a792786a027114c85a89a1bef3155c4bin0 -> 163 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/bf0d70e0d09e5c2ddd79b55dbabdd58b385307f2bin0 -> 47 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/c4a63251d65cb186242e7aba5ab3d4709d3f0065bin0 -> 26 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/ca086cf78308275212c52012f06edf3b4152204abin0 -> 80 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/cd0e7c4cd361b786b6f27c481ed601fd373cb221bin0 -> 62 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/cd4f2c59f0cf55d9a73fb0b96d701c784c446048bin0 -> 23 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9862337313ff89e8dd6fbd6f870a568ec4bd6eccbin0 -> 26 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/d0fcc9d6dc91ead9fd27f0c613ea031f21fb4de4bin0 -> 65 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/d2c828ee88b3e352fad3263f1e1ff901a41fc7a6bin0 -> 49 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/d3124f8fe39ebe943d0d5a7087a51d7e852505bdbin0 -> 64 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/d333dc3999c6dcca82d85f72e65e10c07f12d978bin0 -> 48 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/d91e9bf6b6c78f35a68ba877f3325b3c1ee3db35bin0 -> 60 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/da23c62c70f6c1174adc08093c429f1ec657921abin0 -> 49 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/dd0e562fcf5edda051585b70d3b3780a9a6a2818bin0 -> 37 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/dddf3303e3e8e558ca6f147ec11d8195b6de30bbbin0 -> 47 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/de838de0352fc7ee32452bc83043cf587176e120bin0 -> 19 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/df949398b0b614309219c4128b167746e16a1eadbin0 -> 165 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/e1a0398910c28ad61e065e98e884a7492f6dc594bin0 -> 21 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/e42a9e07845680b8aad95408657c87b01873bcbe1
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/ea351febbe2c4e73fb0e0d34e7d2a23ff46b79f41
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/ec012a94d14659f311451e89e757bd06a93d30b8bin0 -> 64 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/ef930a505edebc0ff6ca7eef7549bbaa21d95b4abin0 -> 47 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/f0a7e39c194ee3f30312ae2f4827bdbd43416a42bin0 -> 44 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/f1b592b7e1a5af83eea1bccc2d7bcca302173d57bin0 -> 48 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/f47f636b8e22e8db428ea956d9336bd12b928a9ebin0 -> 60 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/f4dc057d97c34f31ea542d67593b8d3a295bf52abin0 -> 37 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/f65e41c8021049c4ca8782902de25d6791bae63abin0 -> 124 bytes
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/f73f63e243ea6484a97ece29bb8d4f33841410fcbin0 -> 20 bytes
115 files changed, 908 insertions, 0 deletions
diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c
new file mode 100644
index 0000000000..b750780a95
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer.c
@@ -0,0 +1,888 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <string.h>
+
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+
+#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
+#include "src/core/lib/channel/channel_args.h"
+#include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/lib/iomgr/tcp_client.h"
+#include "src/core/lib/iomgr/timer.h"
+#include "src/core/lib/surface/server.h"
+#include "src/core/lib/transport/metadata.h"
+#include "test/core/util/passthru_endpoint.h"
+
+////////////////////////////////////////////////////////////////////////////////
+// logging
+
+static const bool squelch = true;
+
+static void dont_log(gpr_log_func_args *args) {}
+
+////////////////////////////////////////////////////////////////////////////////
+// input_stream: allows easy access to input bytes, and allows reading a little
+// past the end (avoiding needing to check everywhere)
+
+typedef struct {
+ const uint8_t *cur;
+ const uint8_t *end;
+} input_stream;
+
+static uint8_t next_byte(input_stream *inp) {
+ if (inp->cur == inp->end) {
+ return 0;
+ }
+ return *inp->cur++;
+}
+
+static void end(input_stream *inp) { inp->cur = inp->end; }
+
+static char *read_string(input_stream *inp) {
+ char *str = NULL;
+ size_t cap = 0;
+ size_t sz = 0;
+ char c;
+ do {
+ if (cap == sz) {
+ cap = GPR_MAX(3 * cap / 2, cap + 8);
+ str = gpr_realloc(str, cap);
+ }
+ c = (char)next_byte(inp);
+ str[sz++] = c;
+ } while (c != 0);
+ return str;
+}
+
+static void read_buffer(input_stream *inp, char **buffer, size_t *length) {
+ *length = next_byte(inp);
+ *buffer = gpr_malloc(*length);
+ for (size_t i = 0; i < *length; i++) {
+ (*buffer)[i] = (char)next_byte(inp);
+ }
+}
+
+static uint32_t read_uint22(input_stream *inp) {
+ uint8_t b = next_byte(inp);
+ uint32_t x = b & 0x7f;
+ if (b & 0x80) {
+ x <<= 7;
+ b = next_byte(inp);
+ x |= b & 0x7f;
+ if (b & 0x80) {
+ x <<= 8;
+ x |= next_byte(inp);
+ }
+ }
+ return x;
+}
+
+static uint32_t read_uint32(input_stream *inp) {
+ uint8_t b = next_byte(inp);
+ uint32_t x = b & 0x7f;
+ if (b & 0x80) {
+ x <<= 7;
+ b = next_byte(inp);
+ x |= b & 0x7f;
+ if (b & 0x80) {
+ x <<= 7;
+ b = next_byte(inp);
+ x |= b & 0x7f;
+ if (b & 0x80) {
+ x <<= 7;
+ b = next_byte(inp);
+ x |= b & 0x7f;
+ if (b & 0x80) {
+ x = (x << 4) | (next_byte(inp) & 0x0f);
+ }
+ }
+ }
+ }
+ return x;
+}
+
+static grpc_byte_buffer *read_message(input_stream *inp) {
+ gpr_slice slice = gpr_slice_malloc(read_uint22(inp));
+ memset(GPR_SLICE_START_PTR(slice), 0, GPR_SLICE_LENGTH(slice));
+ return grpc_raw_byte_buffer_create(&slice, 1);
+}
+
+static void read_metadata(input_stream *inp, size_t *count,
+ grpc_metadata **metadata) {
+ *count = next_byte(inp);
+ *metadata = gpr_malloc(*count * sizeof(**metadata));
+ memset(*metadata, 0, *count * sizeof(**metadata));
+ for (size_t i = 0; i < *count; i++) {
+ (*metadata)[i].key = read_string(inp);
+ read_buffer(inp, (char **)&(*metadata)[i].value,
+ &(*metadata)[i].value_length);
+ (*metadata)[i].flags = read_uint32(inp);
+ }
+}
+
+static int read_int(input_stream *inp) { return (int)read_uint32(inp); }
+
+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);
+ }
+ }
+ grpc_channel_args *a = gpr_malloc(sizeof(*a));
+ a->args = args;
+ a->num_args = n;
+ return a;
+}
+
+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;
+
+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
+
+typedef struct addr_req {
+ grpc_timer timer;
+ char *addr;
+ grpc_resolve_cb cb;
+ void *arg;
+} addr_req;
+
+static void finish_resolve(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+ addr_req *r = arg;
+
+ if (success && 0 == strcmp(r->addr, "server")) {
+ grpc_resolved_addresses *addrs = gpr_malloc(sizeof(*addrs));
+ addrs->naddrs = 1;
+ addrs->addrs = gpr_malloc(sizeof(*addrs->addrs));
+ addrs->addrs[0].len = 0;
+ r->cb(exec_ctx, r->arg, addrs);
+ } else {
+ r->cb(exec_ctx, r->arg, NULL);
+ }
+
+ gpr_free(r->addr);
+ gpr_free(r);
+}
+
+void my_resolve_address(grpc_exec_ctx *exec_ctx, const char *addr,
+ const char *default_port, grpc_resolve_cb cb,
+ void *arg) {
+ addr_req *r = gpr_malloc(sizeof(*r));
+ r->addr = gpr_strdup(addr);
+ r->cb = cb;
+ r->arg = arg;
+ grpc_timer_init(exec_ctx, &r->timer,
+ gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_time_from_seconds(1, GPR_TIMESPAN)),
+ finish_resolve, r, gpr_now(GPR_CLOCK_MONOTONIC));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// client connection
+
+// defined in tcp_client_posix.c
+extern void (*grpc_tcp_client_connect_impl)(
+ grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep,
+ grpc_pollset_set *interested_parties, const struct sockaddr *addr,
+ size_t addr_len, gpr_timespec deadline);
+
+static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
+ grpc_endpoint **ep, gpr_timespec deadline);
+
+typedef struct {
+ grpc_timer timer;
+ grpc_closure *closure;
+ grpc_endpoint **ep;
+ gpr_timespec deadline;
+} future_connect;
+
+static void do_connect(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+ future_connect *fc = arg;
+ if (!success) {
+ *fc->ep = NULL;
+ grpc_exec_ctx_enqueue(exec_ctx, fc->closure, false, NULL);
+ } else if (g_server != NULL) {
+ grpc_endpoint *client;
+ grpc_endpoint *server;
+ grpc_passthru_endpoint_create(&client, &server);
+ *fc->ep = client;
+
+ grpc_transport *transport =
+ grpc_create_chttp2_transport(exec_ctx, NULL, server, 0);
+ grpc_server_setup_transport(exec_ctx, g_server, transport, NULL);
+ grpc_chttp2_transport_start_reading(exec_ctx, transport, NULL, 0);
+
+ grpc_exec_ctx_enqueue(exec_ctx, fc->closure, false, NULL);
+ } else {
+ sched_connect(exec_ctx, fc->closure, fc->ep, fc->deadline);
+ }
+ gpr_free(fc);
+}
+
+static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
+ grpc_endpoint **ep, gpr_timespec deadline) {
+ if (gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) <= 0) {
+ *ep = NULL;
+ grpc_exec_ctx_enqueue(exec_ctx, closure, false, NULL);
+ return;
+ }
+
+ future_connect *fc = gpr_malloc(sizeof(*fc));
+ fc->closure = closure;
+ fc->ep = ep;
+ fc->deadline = deadline;
+ grpc_timer_init(exec_ctx, &fc->timer,
+ gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_time_from_millis(1, GPR_TIMESPAN)),
+ do_connect, fc, gpr_now(GPR_CLOCK_MONOTONIC));
+}
+
+static void my_tcp_client_connect(grpc_exec_ctx *exec_ctx,
+ grpc_closure *closure, grpc_endpoint **ep,
+ grpc_pollset_set *interested_parties,
+ const struct sockaddr *addr, size_t addr_len,
+ gpr_timespec deadline) {
+ sched_connect(exec_ctx, closure, ep, deadline);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// test driver
+
+typedef struct validator {
+ void (*validate)(void *arg, bool success);
+ void *arg;
+} validator;
+
+static validator *create_validator(void (*validate)(void *arg, bool success),
+ void *arg) {
+ validator *v = gpr_malloc(sizeof(*v));
+ v->validate = validate;
+ v->arg = arg;
+ return v;
+}
+
+static void assert_success_and_decrement(void *counter, bool success) {
+ GPR_ASSERT(success);
+ --*(int *)counter;
+}
+
+static void decrement(void *counter, bool success) { --*(int *)counter; }
+
+typedef struct connectivity_watch {
+ int *counter;
+ gpr_timespec deadline;
+} connectivity_watch;
+
+static connectivity_watch *make_connectivity_watch(gpr_timespec s,
+ int *counter) {
+ connectivity_watch *o = gpr_malloc(sizeof(*o));
+ o->deadline = s;
+ o->counter = counter;
+ return o;
+}
+
+static void validate_connectivity_watch(void *p, bool success) {
+ connectivity_watch *w = p;
+ if (!success) {
+ GPR_ASSERT(gpr_time_cmp(gpr_now(w->deadline.clock_type), w->deadline) >= 0);
+ }
+ --*w->counter;
+ gpr_free(w);
+}
+
+static void free_non_null(void *p) {
+ GPR_ASSERT(p != NULL);
+ gpr_free(p);
+}
+
+typedef enum { ROOT, CLIENT, SERVER, PENDING_SERVER } call_state_type;
+
+typedef struct call_state {
+ call_state_type type;
+ grpc_call *call;
+ grpc_byte_buffer *recv_message;
+ grpc_status_code status;
+ grpc_metadata_array recv_initial_metadata;
+ grpc_metadata_array recv_trailing_metadata;
+ char *recv_status_details;
+ size_t recv_status_details_capacity;
+ int cancelled;
+ int pending_ops;
+ grpc_call_details call_details;
+
+ struct call_state *next;
+ struct call_state *prev;
+} call_state;
+
+static call_state *g_active_call;
+
+static call_state *new_call(call_state *sibling, call_state_type type) {
+ call_state *c = gpr_malloc(sizeof(*c));
+ memset(c, 0, sizeof(*c));
+ if (sibling != NULL) {
+ c->next = sibling;
+ c->prev = sibling->prev;
+ c->next->prev = c->prev->next = c;
+ } else {
+ c->next = c->prev = c;
+ }
+ c->type = type;
+ return c;
+}
+
+static call_state *maybe_delete_call_state(call_state *call) {
+ call_state *next = call->next;
+
+ if (call->call != NULL) return next;
+ if (call->pending_ops != 0) return next;
+
+ if (call == g_active_call) {
+ g_active_call = call->next;
+ GPR_ASSERT(call != g_active_call);
+ }
+
+ call->prev->next = call->next;
+ call->next->prev = call->prev;
+ grpc_metadata_array_destroy(&call->recv_initial_metadata);
+ grpc_metadata_array_destroy(&call->recv_trailing_metadata);
+ gpr_free(call->recv_status_details);
+ grpc_call_details_destroy(&call->call_details);
+ gpr_free(call);
+
+ return next;
+}
+
+static call_state *destroy_call(call_state *call) {
+ grpc_call_destroy(call->call);
+ call->call = NULL;
+ return maybe_delete_call_state(call);
+}
+
+static void finished_request_call(void *csp, bool success) {
+ call_state *cs = csp;
+ GPR_ASSERT(cs->pending_ops > 0);
+ --cs->pending_ops;
+ if (success) {
+ GPR_ASSERT(cs->call != NULL);
+ cs->type = SERVER;
+ } else {
+ maybe_delete_call_state(cs);
+ }
+}
+
+static void finished_batch(void *csp, bool success) {
+ call_state *cs = csp;
+ --cs->pending_ops;
+ maybe_delete_call_state(cs);
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+ grpc_test_only_set_metadata_hash_seed(0);
+ if (squelch) gpr_set_log_function(dont_log);
+ input_stream inp = {data, data + size};
+ grpc_resolve_address = my_resolve_address;
+ grpc_tcp_client_connect_impl = my_tcp_client_connect;
+ gpr_now_impl = now_impl;
+ grpc_init();
+
+ GPR_ASSERT(g_channel == NULL);
+ GPR_ASSERT(g_server == NULL);
+
+ bool server_shutdown = false;
+ int pending_server_shutdowns = 0;
+ int pending_channel_watches = 0;
+ int pending_pings = 0;
+
+ g_active_call = new_call(NULL, ROOT);
+
+ grpc_completion_queue *cq = grpc_completion_queue_create(NULL);
+
+ while (!is_eof(&inp) || g_channel != NULL || g_server != NULL ||
+ pending_channel_watches > 0 || pending_pings > 0 ||
+ g_active_call->type != ROOT || g_active_call->next != g_active_call) {
+ if (is_eof(&inp)) {
+ if (g_channel != NULL) {
+ grpc_channel_destroy(g_channel);
+ g_channel = NULL;
+ }
+ if (g_server != NULL) {
+ if (!server_shutdown) {
+ grpc_server_shutdown_and_notify(
+ g_server, cq, create_validator(assert_success_and_decrement,
+ &pending_server_shutdowns));
+ server_shutdown = true;
+ pending_server_shutdowns++;
+ } else if (pending_server_shutdowns == 0) {
+ grpc_server_destroy(g_server);
+ g_server = NULL;
+ }
+ }
+ call_state *s = g_active_call;
+ do {
+ if (s->type != PENDING_SERVER && s->call != NULL) {
+ s = destroy_call(s);
+ } else {
+ s = s->next;
+ }
+ } while (s != g_active_call);
+
+ g_now = gpr_time_add(g_now, gpr_time_from_seconds(1, GPR_TIMESPAN));
+ }
+
+ switch (next_byte(&inp)) {
+ // terminate on bad bytes
+ default:
+ end(&inp);
+ break;
+ // tickle completion queue
+ case 0: {
+ grpc_event ev = grpc_completion_queue_next(
+ cq, gpr_inf_past(GPR_CLOCK_REALTIME), NULL);
+ switch (ev.type) {
+ case GRPC_OP_COMPLETE: {
+ validator *v = ev.tag;
+ v->validate(v->arg, ev.success);
+ gpr_free(v);
+ break;
+ }
+ case GRPC_QUEUE_TIMEOUT:
+ break;
+ case GRPC_QUEUE_SHUTDOWN:
+ abort();
+ break;
+ }
+ break;
+ }
+ // increment global time
+ case 1: {
+ g_now = gpr_time_add(
+ g_now, gpr_time_from_micros(read_uint32(&inp), GPR_TIMESPAN));
+ break;
+ }
+ // create an insecure channel
+ case 2: {
+ if (g_channel == NULL) {
+ char *target = read_string(&inp);
+ char *target_uri;
+ gpr_asprintf(&target_uri, "dns:%s", target);
+ grpc_channel_args *args = read_args(&inp);
+ g_channel = grpc_insecure_channel_create(target_uri, args, NULL);
+ GPR_ASSERT(g_channel != NULL);
+ grpc_channel_args_destroy(args);
+ gpr_free(target_uri);
+ gpr_free(target);
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // destroy a channel
+ case 3: {
+ if (g_channel != NULL) {
+ grpc_channel_destroy(g_channel);
+ g_channel = NULL;
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // bring up a server
+ case 4: {
+ if (g_server == NULL) {
+ grpc_channel_args *args = read_args(&inp);
+ g_server = grpc_server_create(args, NULL);
+ GPR_ASSERT(g_server != NULL);
+ grpc_channel_args_destroy(args);
+ grpc_server_register_completion_queue(g_server, cq, NULL);
+ grpc_server_start(g_server);
+ server_shutdown = false;
+ GPR_ASSERT(pending_server_shutdowns == 0);
+ } else {
+ end(&inp);
+ }
+ }
+ // begin server shutdown
+ case 5: {
+ if (g_server != NULL) {
+ grpc_server_shutdown_and_notify(
+ g_server, cq, create_validator(assert_success_and_decrement,
+ &pending_server_shutdowns));
+ pending_server_shutdowns++;
+ server_shutdown = true;
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // cancel all calls if shutdown
+ case 6: {
+ if (g_server != NULL && server_shutdown) {
+ grpc_server_cancel_all_calls(g_server);
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // destroy server
+ case 7: {
+ if (g_server != NULL && server_shutdown &&
+ pending_server_shutdowns == 0) {
+ grpc_server_destroy(g_server);
+ g_server = NULL;
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // check connectivity
+ case 8: {
+ if (g_channel != NULL) {
+ uint8_t try_to_connect = next_byte(&inp);
+ if (try_to_connect == 0 || try_to_connect == 1) {
+ grpc_channel_check_connectivity_state(g_channel, try_to_connect);
+ } else {
+ end(&inp);
+ }
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // watch connectivity
+ case 9: {
+ if (g_channel != NULL) {
+ grpc_connectivity_state st =
+ grpc_channel_check_connectivity_state(g_channel, 0);
+ if (st != GRPC_CHANNEL_FATAL_FAILURE) {
+ gpr_timespec deadline = gpr_time_add(
+ gpr_now(GPR_CLOCK_REALTIME),
+ gpr_time_from_micros(read_uint32(&inp), GPR_TIMESPAN));
+ grpc_channel_watch_connectivity_state(
+ g_channel, st, deadline, cq,
+ create_validator(validate_connectivity_watch,
+ make_connectivity_watch(
+ deadline, &pending_channel_watches)));
+ pending_channel_watches++;
+ }
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // create a call
+ case 10: {
+ bool ok = true;
+ if (g_channel == NULL) ok = false;
+ grpc_call *parent_call = NULL;
+ if (g_active_call->type != ROOT) {
+ if (g_active_call->call == NULL || g_active_call->type == CLIENT) {
+ end(&inp);
+ break;
+ }
+ parent_call = g_active_call->call;
+ }
+ uint32_t propagation_mask = read_uint32(&inp);
+ char *method = read_string(&inp);
+ char *host = read_string(&inp);
+ gpr_timespec deadline =
+ gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
+ gpr_time_from_micros(read_uint32(&inp), GPR_TIMESPAN));
+
+ if (ok) {
+ call_state *cs = new_call(g_active_call, CLIENT);
+ cs->call =
+ grpc_channel_create_call(g_channel, parent_call, propagation_mask,
+ cq, method, host, deadline, NULL);
+ } else {
+ end(&inp);
+ }
+ gpr_free(method);
+ gpr_free(host);
+ break;
+ }
+ // switch the 'current' call
+ case 11: {
+ g_active_call = g_active_call->next;
+ break;
+ }
+ // queue some ops on a call
+ case 12: {
+ if (g_active_call->type == PENDING_SERVER ||
+ g_active_call->type == ROOT || g_active_call->call == NULL) {
+ end(&inp);
+ break;
+ }
+ size_t num_ops = next_byte(&inp);
+ if (num_ops > 6) {
+ end(&inp);
+ break;
+ }
+ grpc_op *ops = gpr_malloc(sizeof(grpc_op) * num_ops);
+ bool ok = true;
+ size_t i;
+ grpc_op *op;
+ for (i = 0; i < num_ops; i++) {
+ op = &ops[i];
+ switch (next_byte(&inp)) {
+ default:
+ /* invalid value */
+ op->op = (grpc_op_type)-1;
+ ok = false;
+ break;
+ case GRPC_OP_SEND_INITIAL_METADATA:
+ op->op = GRPC_OP_SEND_INITIAL_METADATA;
+ read_metadata(&inp, &op->data.send_initial_metadata.count,
+ &op->data.send_initial_metadata.metadata);
+ break;
+ case GRPC_OP_SEND_MESSAGE:
+ op->op = GRPC_OP_SEND_MESSAGE;
+ op->data.send_message = read_message(&inp);
+ break;
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
+ op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT;
+ break;
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
+ op->op = GRPC_OP_SEND_STATUS_FROM_SERVER;
+ read_metadata(
+ &inp,
+ &op->data.send_status_from_server.trailing_metadata_count,
+ &op->data.send_status_from_server.trailing_metadata);
+ op->data.send_status_from_server.status = next_byte(&inp);
+ op->data.send_status_from_server.status_details =
+ read_string(&inp);
+ break;
+ case GRPC_OP_RECV_INITIAL_METADATA:
+ op->op = GRPC_OP_RECV_INITIAL_METADATA;
+ op->data.recv_initial_metadata =
+ &g_active_call->recv_initial_metadata;
+ break;
+ case GRPC_OP_RECV_MESSAGE:
+ op->op = GRPC_OP_RECV_MESSAGE;
+ op->data.recv_message = &g_active_call->recv_message;
+ break;
+ case GRPC_OP_RECV_STATUS_ON_CLIENT:
+ op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
+ op->data.recv_status_on_client.status = &g_active_call->status;
+ op->data.recv_status_on_client.trailing_metadata =
+ &g_active_call->recv_trailing_metadata;
+ op->data.recv_status_on_client.status_details =
+ &g_active_call->recv_status_details;
+ op->data.recv_status_on_client.status_details_capacity =
+ &g_active_call->recv_status_details_capacity;
+ break;
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
+ op->op = GRPC_OP_RECV_CLOSE_ON_SERVER;
+ op->data.recv_close_on_server.cancelled =
+ &g_active_call->cancelled;
+ break;
+ }
+ op->reserved = NULL;
+ op->flags = read_uint32(&inp);
+ }
+ if (ok) {
+ validator *v = create_validator(finished_batch, g_active_call);
+ g_active_call->pending_ops++;
+ grpc_call_error error =
+ grpc_call_start_batch(g_active_call->call, ops, num_ops, v, NULL);
+ if (error != GRPC_CALL_OK) {
+ v->validate(v->arg, false);
+ gpr_free(v);
+ }
+ } else {
+ end(&inp);
+ }
+ for (i = 0; i < num_ops; i++) {
+ op = &ops[i];
+ switch (op->op) {
+ case GRPC_OP_SEND_INITIAL_METADATA:
+ for (size_t j = 0; j < op->data.send_initial_metadata.count;
+ j++) {
+ gpr_free(
+ (void *)op->data.send_initial_metadata.metadata[j].key);
+ gpr_free(
+ (void *)op->data.send_initial_metadata.metadata[j].value);
+ }
+ gpr_free(op->data.send_initial_metadata.metadata);
+ break;
+ case GRPC_OP_SEND_MESSAGE:
+ grpc_byte_buffer_destroy(op->data.send_message);
+ break;
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
+ for (size_t j = 0;
+ j < op->data.send_status_from_server.trailing_metadata_count;
+ j++) {
+ gpr_free((void *)op->data.send_status_from_server
+ .trailing_metadata[j]
+ .key);
+ gpr_free((void *)op->data.send_status_from_server
+ .trailing_metadata[j]
+ .value);
+ }
+ gpr_free(op->data.send_status_from_server.trailing_metadata);
+ gpr_free((void *)op->data.send_status_from_server.status_details);
+ break;
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
+ case GRPC_OP_RECV_INITIAL_METADATA:
+ case GRPC_OP_RECV_MESSAGE:
+ case GRPC_OP_RECV_STATUS_ON_CLIENT:
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
+ break;
+ }
+ }
+ gpr_free(ops);
+
+ break;
+ }
+ // cancel current call
+ case 13: {
+ if (g_active_call->type != ROOT && g_active_call->call != NULL) {
+ grpc_call_cancel(g_active_call->call, NULL);
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // get a calls peer
+ case 14: {
+ if (g_active_call->type != ROOT && g_active_call->call != NULL) {
+ free_non_null(grpc_call_get_peer(g_active_call->call));
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // get a channels target
+ case 15: {
+ if (g_channel != NULL) {
+ free_non_null(grpc_channel_get_target(g_channel));
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // send a ping on a channel
+ case 16: {
+ if (g_channel != NULL) {
+ pending_pings++;
+ grpc_channel_ping(g_channel, cq,
+ create_validator(decrement, &pending_pings), NULL);
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ // enable a tracer
+ case 17: {
+ char *tracer = read_string(&inp);
+ grpc_tracer_set_enabled(tracer, 1);
+ gpr_free(tracer);
+ break;
+ }
+ // disable a tracer
+ case 18: {
+ char *tracer = read_string(&inp);
+ grpc_tracer_set_enabled(tracer, 0);
+ gpr_free(tracer);
+ break;
+ }
+ // request a server call
+ case 19: {
+ if (g_server == NULL) {
+ end(&inp);
+ break;
+ }
+ call_state *cs = new_call(g_active_call, PENDING_SERVER);
+ cs->pending_ops++;
+ validator *v = create_validator(finished_request_call, cs);
+ grpc_call_error error =
+ grpc_server_request_call(g_server, &cs->call, &cs->call_details,
+ &cs->recv_initial_metadata, cq, cq, v);
+ if (error != GRPC_CALL_OK) {
+ v->validate(v->arg, false);
+ gpr_free(v);
+ }
+ break;
+ }
+ // destroy a call
+ case 20: {
+ if (g_active_call->type != ROOT &&
+ g_active_call->type != PENDING_SERVER &&
+ g_active_call->call != NULL) {
+ destroy_call(g_active_call);
+ } else {
+ end(&inp);
+ }
+ break;
+ }
+ }
+ }
+
+ GPR_ASSERT(g_channel == NULL);
+ GPR_ASSERT(g_server == NULL);
+ GPR_ASSERT(g_active_call->type == ROOT);
+ GPR_ASSERT(g_active_call->next == g_active_call);
+ gpr_free(g_active_call);
+
+ grpc_completion_queue_shutdown(cq);
+ GPR_ASSERT(
+ grpc_completion_queue_next(cq, gpr_inf_past(GPR_CLOCK_REALTIME), NULL)
+ .type == GRPC_QUEUE_SHUTDOWN);
+ grpc_completion_queue_destroy(cq);
+
+ grpc_shutdown();
+ return 0;
+}
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin
new file mode 100644
index 0000000000..f76dd238ad
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/01.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/01.bin
new file mode 100644
index 0000000000..6b2aaa7640
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/01.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/02.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/02.bin
new file mode 100644
index 0000000000..25cb955ba2
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/02.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/03.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/03.bin
new file mode 100644
index 0000000000..fc2b5693e0
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/03.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/04.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/04.bin
new file mode 100644
index 0000000000..45a8ca02bf
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/04.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0452ea591951af85724608917fda16926dad7451 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0452ea591951af85724608917fda16926dad7451
new file mode 100644
index 0000000000..8803e430b9
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0452ea591951af85724608917fda16926dad7451
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/05.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/05.bin
new file mode 100644
index 0000000000..b0b2b1c8dd
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/05.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/06.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/06.bin
new file mode 100644
index 0000000000..f8fa5a2354
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/06.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/07.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/07.bin
new file mode 100644
index 0000000000..303e398c82
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/07.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/07ae5ed3dedbd83e376c892a9546cc0cd733c26f b/test/core/end2end/fuzzers/api_fuzzer_corpus/07ae5ed3dedbd83e376c892a9546cc0cd733c26f
new file mode 100644
index 0000000000..e814b6ec56
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/07ae5ed3dedbd83e376c892a9546cc0cd733c26f
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/08.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/08.bin
new file mode 100644
index 0000000000..5a77f05831
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/08.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/09.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/09.bin
new file mode 100644
index 0000000000..501a6bbaf1
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/09.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0a.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/0a.bin
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0a.bin
@@ -0,0 +1 @@
+
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0b.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/0b.bin
new file mode 100644
index 0000000000..2725bca000
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0b.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0c.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c.bin
new file mode 100644
index 0000000000..8214d0ee07
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0c.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0d.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d.bin
new file mode 100644
index 0000000000..67c3297611
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0d9d8241c5568fea586d21f91ae1891dac31ba24 b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d9d8241c5568fea586d21f91ae1891dac31ba24
new file mode 100644
index 0000000000..251648518a
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0d9d8241c5568fea586d21f91ae1891dac31ba24
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0e.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/0e.bin
new file mode 100644
index 0000000000..9280c0d31d
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0e.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/0f.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/0f.bin
new file mode 100644
index 0000000000..c30d0581bf
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/0f.bin
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/130c41e2dd87c36b4079c8e5bd380dbe3e0a2b38 b/test/core/end2end/fuzzers/api_fuzzer_corpus/130c41e2dd87c36b4079c8e5bd380dbe3e0a2b38
new file mode 100644
index 0000000000..c737ee5cd1
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/130c41e2dd87c36b4079c8e5bd380dbe3e0a2b38
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/15c37fe5be9f23c0f0e59e12ee7666007acdb3c5 b/test/core/end2end/fuzzers/api_fuzzer_corpus/15c37fe5be9f23c0f0e59e12ee7666007acdb3c5
new file mode 100644
index 0000000000..33e9109648
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/15c37fe5be9f23c0f0e59e12ee7666007acdb3c5
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1661d0799cbf2015fd64e9f648ebb49281d41c6d b/test/core/end2end/fuzzers/api_fuzzer_corpus/1661d0799cbf2015fd64e9f648ebb49281d41c6d
new file mode 100644
index 0000000000..363345d232
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1661d0799cbf2015fd64e9f648ebb49281d41c6d
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/17cfb281eaa8a17d77e08c3648bb93f3b5aa5297 b/test/core/end2end/fuzzers/api_fuzzer_corpus/17cfb281eaa8a17d77e08c3648bb93f3b5aa5297
new file mode 100644
index 0000000000..b951e5a31b
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/17cfb281eaa8a17d77e08c3648bb93f3b5aa5297
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/1a6b907bfa02ceebeb80aab47b3c3c51161eb868 b/test/core/end2end/fuzzers/api_fuzzer_corpus/1a6b907bfa02ceebeb80aab47b3c3c51161eb868
new file mode 100644
index 0000000000..ebd58f0464
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/1a6b907bfa02ceebeb80aab47b3c3c51161eb868
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/20322515ebf6df572cb2f596d8a20d3d8893193d b/test/core/end2end/fuzzers/api_fuzzer_corpus/20322515ebf6df572cb2f596d8a20d3d8893193d
new file mode 100644
index 0000000000..0e9a66eb9a
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/20322515ebf6df572cb2f596d8a20d3d8893193d
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2099db589f606dd8932a950280f5d2b23751af9f b/test/core/end2end/fuzzers/api_fuzzer_corpus/2099db589f606dd8932a950280f5d2b23751af9f
new file mode 100644
index 0000000000..085168f792
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2099db589f606dd8932a950280f5d2b23751af9f
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2743ee5a764fb0c4e04cdf84c9b3810ac8093998 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2743ee5a764fb0c4e04cdf84c9b3810ac8093998
new file mode 100644
index 0000000000..a070f08446
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2743ee5a764fb0c4e04cdf84c9b3810ac8093998
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2942908b7973da7113098a0ea25487e3372db173 b/test/core/end2end/fuzzers/api_fuzzer_corpus/2942908b7973da7113098a0ea25487e3372db173
new file mode 100644
index 0000000000..b794909fa9
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2942908b7973da7113098a0ea25487e3372db173
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/2ab009994e603404e194ebe0120840d388fb765e b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ab009994e603404e194ebe0120840d388fb765e
new file mode 100644
index 0000000000..2972ed8abe
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/2ab009994e603404e194ebe0120840d388fb765e
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/313001e1cc15ef9887b43e0c6de398eea2f20e00 b/test/core/end2end/fuzzers/api_fuzzer_corpus/313001e1cc15ef9887b43e0c6de398eea2f20e00
new file mode 100644
index 0000000000..ec613045c8
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/313001e1cc15ef9887b43e0c6de398eea2f20e00
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/31429d04a34cc6643eebed7eeb8a807a83b57b1f b/test/core/end2end/fuzzers/api_fuzzer_corpus/31429d04a34cc6643eebed7eeb8a807a83b57b1f
new file mode 100644
index 0000000000..5713b9e316
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/31429d04a34cc6643eebed7eeb8a807a83b57b1f
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/32594aaa716c1a04b0f927ef964f1593735cb289 b/test/core/end2end/fuzzers/api_fuzzer_corpus/32594aaa716c1a04b0f927ef964f1593735cb289
new file mode 100644
index 0000000000..390f90e27b
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/32594aaa716c1a04b0f927ef964f1593735cb289
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3a287590e2d38d5dbc0b85d29ae2497d27aa0305 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3a287590e2d38d5dbc0b85d29ae2497d27aa0305
new file mode 100644
index 0000000000..266d308de2
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3a287590e2d38d5dbc0b85d29ae2497d27aa0305
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3a4fa4e81b78cae093b2d53b0a6f272a398a7cda b/test/core/end2end/fuzzers/api_fuzzer_corpus/3a4fa4e81b78cae093b2d53b0a6f272a398a7cda
new file mode 100644
index 0000000000..796be8ef09
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3a4fa4e81b78cae093b2d53b0a6f272a398a7cda
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3c84d21c46b89e7573750dd4517ea2eb58e37e27 b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c84d21c46b89e7573750dd4517ea2eb58e37e27
new file mode 100644
index 0000000000..1ae200faf7
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c84d21c46b89e7573750dd4517ea2eb58e37e27
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3c8e6352f6c2a07bd5ef2b9a93c103935c8eaf0d b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c8e6352f6c2a07bd5ef2b9a93c103935c8eaf0d
new file mode 100644
index 0000000000..e631a79a09
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3c8e6352f6c2a07bd5ef2b9a93c103935c8eaf0d
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/3f36ae935255c4bbd2bd8d4a85bfa92bba02225c b/test/core/end2end/fuzzers/api_fuzzer_corpus/3f36ae935255c4bbd2bd8d4a85bfa92bba02225c
new file mode 100644
index 0000000000..6d4b5bd9cf
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/3f36ae935255c4bbd2bd8d4a85bfa92bba02225c
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/439d4e4ed3ab9fe77e2bbda5b2be3d123beefa00 b/test/core/end2end/fuzzers/api_fuzzer_corpus/439d4e4ed3ab9fe77e2bbda5b2be3d123beefa00
new file mode 100644
index 0000000000..100fcdc76c
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/439d4e4ed3ab9fe77e2bbda5b2be3d123beefa00
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/441c94c010d19206c337d3c850cc449523ab480d b/test/core/end2end/fuzzers/api_fuzzer_corpus/441c94c010d19206c337d3c850cc449523ab480d
new file mode 100644
index 0000000000..1885de73f3
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/441c94c010d19206c337d3c850cc449523ab480d
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/449ece0109a8543f26311f3ddc23525a2f288b64 b/test/core/end2end/fuzzers/api_fuzzer_corpus/449ece0109a8543f26311f3ddc23525a2f288b64
new file mode 100644
index 0000000000..edfd64ca1b
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/449ece0109a8543f26311f3ddc23525a2f288b64
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/44e1fdcc46db56bf61a6702fd10766b56d35bc74 b/test/core/end2end/fuzzers/api_fuzzer_corpus/44e1fdcc46db56bf61a6702fd10766b56d35bc74
new file mode 100644
index 0000000000..eb48a38ae5
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/44e1fdcc46db56bf61a6702fd10766b56d35bc74
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/47ecf4079ea23d4de5fd9282f733eb5429f7ab05 b/test/core/end2end/fuzzers/api_fuzzer_corpus/47ecf4079ea23d4de5fd9282f733eb5429f7ab05
new file mode 100644
index 0000000000..d64a5a8a6a
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/47ecf4079ea23d4de5fd9282f733eb5429f7ab05
@@ -0,0 +1 @@
+í \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/4c686a41d4d2226b3cc76b8154d8df090d075f00 b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c686a41d4d2226b3cc76b8154d8df090d075f00
new file mode 100644
index 0000000000..84021f12d9
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/4c686a41d4d2226b3cc76b8154d8df090d075f00
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5298ce28a7eab28c99964c0d838b017355607c92 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5298ce28a7eab28c99964c0d838b017355607c92
new file mode 100644
index 0000000000..811352a641
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5298ce28a7eab28c99964c0d838b017355607c92
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5a6491ab9c23fae58967d4a4b5d5cfb23f620001 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a6491ab9c23fae58967d4a4b5d5cfb23f620001
new file mode 100644
index 0000000000..7904c178d2
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a6491ab9c23fae58967d4a4b5d5cfb23f620001
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5a8ca84c7d4d9b055f05c55b1f707f223979d387 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a8ca84c7d4d9b055f05c55b1f707f223979d387
new file mode 100644
index 0000000000..54a81dcac6
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5a8ca84c7d4d9b055f05c55b1f707f223979d387
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5d2f29b31d78b47077b15779d620747034d18c05 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5d2f29b31d78b47077b15779d620747034d18c05
new file mode 100644
index 0000000000..88f6ab193d
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5d2f29b31d78b47077b15779d620747034d18c05
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/5ea01efbec747fc55ae29eb2b779f00889ca6922 b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ea01efbec747fc55ae29eb2b779f00889ca6922
new file mode 100644
index 0000000000..f76c4ae5ff
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/5ea01efbec747fc55ae29eb2b779f00889ca6922
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6184ea16753b0827f728285f18dad4b3bde00024 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6184ea16753b0827f728285f18dad4b3bde00024
new file mode 100644
index 0000000000..f6171477cb
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6184ea16753b0827f728285f18dad4b3bde00024
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6230cce2862a18c4c92dc6fb4e034a1d15e1ff18 b/test/core/end2end/fuzzers/api_fuzzer_corpus/6230cce2862a18c4c92dc6fb4e034a1d15e1ff18
new file mode 100644
index 0000000000..f3320f1c2b
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6230cce2862a18c4c92dc6fb4e034a1d15e1ff18
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/62fbfe90a1b9ac471bc2644c896f64515f6b3c7e b/test/core/end2end/fuzzers/api_fuzzer_corpus/62fbfe90a1b9ac471bc2644c896f64515f6b3c7e
new file mode 100644
index 0000000000..27d167826c
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/62fbfe90a1b9ac471bc2644c896f64515f6b3c7e
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/638c36cfe098b98008e594eddf90fdacfc078fae b/test/core/end2end/fuzzers/api_fuzzer_corpus/638c36cfe098b98008e594eddf90fdacfc078fae
new file mode 100644
index 0000000000..153b006e96
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/638c36cfe098b98008e594eddf90fdacfc078fae
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/682cb8ad9fe4641e7a140ae3d3ee27c841ba397f b/test/core/end2end/fuzzers/api_fuzzer_corpus/682cb8ad9fe4641e7a140ae3d3ee27c841ba397f
new file mode 100644
index 0000000000..a25e18212f
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/682cb8ad9fe4641e7a140ae3d3ee27c841ba397f
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/696ea30e2e1490f2f31b153641b2c29152ded5c2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/696ea30e2e1490f2f31b153641b2c29152ded5c2
new file mode 100644
index 0000000000..7b43eeb20a
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/696ea30e2e1490f2f31b153641b2c29152ded5c2
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6c1c2177f3483086607c717d0c6c35a81d79e18e b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c1c2177f3483086607c717d0c6c35a81d79e18e
new file mode 100644
index 0000000000..717269dd63
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6c1c2177f3483086607c717d0c6c35a81d79e18e
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/6f8ffc96f9ebe390929165e32bdc187afb7a40ce b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f8ffc96f9ebe390929165e32bdc187afb7a40ce
new file mode 100644
index 0000000000..420c2c1e1a
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/6f8ffc96f9ebe390929165e32bdc187afb7a40ce
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7462e4d1834938e8a5fb975da6865cc7d6b225f3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7462e4d1834938e8a5fb975da6865cc7d6b225f3
new file mode 100644
index 0000000000..2db7068462
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7462e4d1834938e8a5fb975da6865cc7d6b225f3
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/74eef5817db3984a020b2868f3c9979d0220c829 b/test/core/end2end/fuzzers/api_fuzzer_corpus/74eef5817db3984a020b2868f3c9979d0220c829
new file mode 100644
index 0000000000..266e5c4947
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/74eef5817db3984a020b2868f3c9979d0220c829
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/761f683f6486e3efb606bf08fa527a4c1a51f302 b/test/core/end2end/fuzzers/api_fuzzer_corpus/761f683f6486e3efb606bf08fa527a4c1a51f302
new file mode 100644
index 0000000000..99a59683f1
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/761f683f6486e3efb606bf08fa527a4c1a51f302
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/768b6302130ac824947f956e062184afaafcdbab b/test/core/end2end/fuzzers/api_fuzzer_corpus/768b6302130ac824947f956e062184afaafcdbab
new file mode 100644
index 0000000000..71e1c98fac
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/768b6302130ac824947f956e062184afaafcdbab
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7c026422a34cb34de673a1d6702cbde67d112d27 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c026422a34cb34de673a1d6702cbde67d112d27
new file mode 100644
index 0000000000..e85bb86ad4
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c026422a34cb34de673a1d6702cbde67d112d27
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7c9b4e2ea03542254235893edd042a822145e504 b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c9b4e2ea03542254235893edd042a822145e504
new file mode 100644
index 0000000000..42751a19d7
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7c9b4e2ea03542254235893edd042a822145e504
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/7d33039255c9611d0e9e0cc7e230f87ad55c007f b/test/core/end2end/fuzzers/api_fuzzer_corpus/7d33039255c9611d0e9e0cc7e230f87ad55c007f
new file mode 100644
index 0000000000..e1ab5b3717
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/7d33039255c9611d0e9e0cc7e230f87ad55c007f
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/80a249d17248e0dc7dcc9fb64d8ac2dd0320a544 b/test/core/end2end/fuzzers/api_fuzzer_corpus/80a249d17248e0dc7dcc9fb64d8ac2dd0320a544
new file mode 100644
index 0000000000..8f68ee5907
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/80a249d17248e0dc7dcc9fb64d8ac2dd0320a544
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8123e9dc4d43115412f07fcf9946c99d9a1a55c3 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8123e9dc4d43115412f07fcf9946c99d9a1a55c3
new file mode 100644
index 0000000000..7de08146e4
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8123e9dc4d43115412f07fcf9946c99d9a1a55c3
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8492f54a92f9a2a05af1a078489a3a68145d8985 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8492f54a92f9a2a05af1a078489a3a68145d8985
new file mode 100644
index 0000000000..d489fafed3
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8492f54a92f9a2a05af1a078489a3a68145d8985
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8791b58ad0dbfdf9c37d48bc60940f86c6c7e3b4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8791b58ad0dbfdf9c37d48bc60940f86c6c7e3b4
new file mode 100644
index 0000000000..fdd8d37e11
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8791b58ad0dbfdf9c37d48bc60940f86c6c7e3b4
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/880070b48f04fd1c8ffafd750e1c4d37ff404c6c b/test/core/end2end/fuzzers/api_fuzzer_corpus/880070b48f04fd1c8ffafd750e1c4d37ff404c6c
new file mode 100644
index 0000000000..a9e62d9980
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/880070b48f04fd1c8ffafd750e1c4d37ff404c6c
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8a9f7329b30a562837353767313df7fa9a1f31f7 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a9f7329b30a562837353767313df7fa9a1f31f7
new file mode 100644
index 0000000000..6a1887785e
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8a9f7329b30a562837353767313df7fa9a1f31f7
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8b253ba946d6768c147f5d52552e150b703437e0 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b253ba946d6768c147f5d52552e150b703437e0
new file mode 100644
index 0000000000..6985667939
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b253ba946d6768c147f5d52552e150b703437e0
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8b53f252f8558726dc0daaee84e2b4d2f0835f44 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b53f252f8558726dc0daaee84e2b4d2f0835f44
new file mode 100644
index 0000000000..48e9805059
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8b53f252f8558726dc0daaee84e2b4d2f0835f44
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8d7bb385d6b13b0e689a1e81e29113746218ba99 b/test/core/end2end/fuzzers/api_fuzzer_corpus/8d7bb385d6b13b0e689a1e81e29113746218ba99
new file mode 100644
index 0000000000..66ee1d4699
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8d7bb385d6b13b0e689a1e81e29113746218ba99
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/8f43b11f10961dcce8eaa8340c96d10bdbc937ad b/test/core/end2end/fuzzers/api_fuzzer_corpus/8f43b11f10961dcce8eaa8340c96d10bdbc937ad
new file mode 100644
index 0000000000..c12934d57e
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/8f43b11f10961dcce8eaa8340c96d10bdbc937ad
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9a0de0d63d44e00fc88e6cb88f4b8665db3b4b5e b/test/core/end2end/fuzzers/api_fuzzer_corpus/9a0de0d63d44e00fc88e6cb88f4b8665db3b4b5e
new file mode 100644
index 0000000000..cb87caa805
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9a0de0d63d44e00fc88e6cb88f4b8665db3b4b5e
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9bfd723bfa4162bb5801a6050af0a8b2db10d4ab b/test/core/end2end/fuzzers/api_fuzzer_corpus/9bfd723bfa4162bb5801a6050af0a8b2db10d4ab
new file mode 100644
index 0000000000..4259817b69
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9bfd723bfa4162bb5801a6050af0a8b2db10d4ab
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/9c837f4e6cb572b3431b3a5065b889273712810e b/test/core/end2end/fuzzers/api_fuzzer_corpus/9c837f4e6cb572b3431b3a5065b889273712810e
new file mode 100644
index 0000000000..762d870360
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/9c837f4e6cb572b3431b3a5065b889273712810e
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a1b153e4cde45a7302094f6c751e3248d2f0fb8e b/test/core/end2end/fuzzers/api_fuzzer_corpus/a1b153e4cde45a7302094f6c751e3248d2f0fb8e
new file mode 100644
index 0000000000..132222cce9
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a1b153e4cde45a7302094f6c751e3248d2f0fb8e
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/a3c9b6e89b534d02bdad07207c4fdcda536f28a4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3c9b6e89b534d02bdad07207c4fdcda536f28a4
new file mode 100644
index 0000000000..296a734f16
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/a3c9b6e89b534d02bdad07207c4fdcda536f28a4
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/aabcb4ea803e0b5399cb7a2cca8d28baa3f6c4ae b/test/core/end2end/fuzzers/api_fuzzer_corpus/aabcb4ea803e0b5399cb7a2cca8d28baa3f6c4ae
new file mode 100644
index 0000000000..712d2a999e
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/aabcb4ea803e0b5399cb7a2cca8d28baa3f6c4ae
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b0ff62377b87b846f720a70f0b7f7bdc76aa1315 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b0ff62377b87b846f720a70f0b7f7bdc76aa1315
new file mode 100644
index 0000000000..a502809ae8
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b0ff62377b87b846f720a70f0b7f7bdc76aa1315
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b33f833f291ebba4d777c2bae51193553c27d138 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b33f833f291ebba4d777c2bae51193553c27d138
new file mode 100644
index 0000000000..16ffa9d81f
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b33f833f291ebba4d777c2bae51193553c27d138
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/b77ca0306f700c8c88854e73ccbdf470fba3f820 b/test/core/end2end/fuzzers/api_fuzzer_corpus/b77ca0306f700c8c88854e73ccbdf470fba3f820
new file mode 100644
index 0000000000..afbc92d506
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/b77ca0306f700c8c88854e73ccbdf470fba3f820
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bad.bin b/test/core/end2end/fuzzers/api_fuzzer_corpus/bad.bin
new file mode 100644
index 0000000000..5cb3083d83
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bad.bin
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bb349c691efa909b4c5412b9210e1acf4a4b7505 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb349c691efa909b4c5412b9210e1acf4a4b7505
new file mode 100644
index 0000000000..b22a7683a5
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bb349c691efa909b4c5412b9210e1acf4a4b7505
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bc7f0b79a1781772d7f48e168462f99da27b03e2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bc7f0b79a1781772d7f48e168462f99da27b03e2
new file mode 100644
index 0000000000..fdc020d737
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bc7f0b79a1781772d7f48e168462f99da27b03e2
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/be40890ee61e101a7429d53cd9ffd59ee600e0f6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/be40890ee61e101a7429d53cd9ffd59ee600e0f6
new file mode 100644
index 0000000000..24f445985a
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/be40890ee61e101a7429d53cd9ffd59ee600e0f6
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bef8cedf1a792786a027114c85a89a1bef3155c4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bef8cedf1a792786a027114c85a89a1bef3155c4
new file mode 100644
index 0000000000..b3c115e2bb
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bef8cedf1a792786a027114c85a89a1bef3155c4
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/bf0d70e0d09e5c2ddd79b55dbabdd58b385307f2 b/test/core/end2end/fuzzers/api_fuzzer_corpus/bf0d70e0d09e5c2ddd79b55dbabdd58b385307f2
new file mode 100644
index 0000000000..63cc356a73
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/bf0d70e0d09e5c2ddd79b55dbabdd58b385307f2
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/c4a63251d65cb186242e7aba5ab3d4709d3f0065 b/test/core/end2end/fuzzers/api_fuzzer_corpus/c4a63251d65cb186242e7aba5ab3d4709d3f0065
new file mode 100644
index 0000000000..240cc20c05
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/c4a63251d65cb186242e7aba5ab3d4709d3f0065
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ca086cf78308275212c52012f06edf3b4152204a b/test/core/end2end/fuzzers/api_fuzzer_corpus/ca086cf78308275212c52012f06edf3b4152204a
new file mode 100644
index 0000000000..564a12e285
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ca086cf78308275212c52012f06edf3b4152204a
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/cd0e7c4cd361b786b6f27c481ed601fd373cb221 b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd0e7c4cd361b786b6f27c481ed601fd373cb221
new file mode 100644
index 0000000000..be7a1706c2
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd0e7c4cd361b786b6f27c481ed601fd373cb221
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/cd4f2c59f0cf55d9a73fb0b96d701c784c446048 b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd4f2c59f0cf55d9a73fb0b96d701c784c446048
new file mode 100644
index 0000000000..bed26bd411
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/cd4f2c59f0cf55d9a73fb0b96d701c784c446048
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9862337313ff89e8dd6fbd6f870a568ec4bd6ecc b/test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9862337313ff89e8dd6fbd6f870a568ec4bd6ecc
new file mode 100644
index 0000000000..4114505579
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/crash-9862337313ff89e8dd6fbd6f870a568ec4bd6ecc
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d0fcc9d6dc91ead9fd27f0c613ea031f21fb4de4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d0fcc9d6dc91ead9fd27f0c613ea031f21fb4de4
new file mode 100644
index 0000000000..f7892d30eb
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d0fcc9d6dc91ead9fd27f0c613ea031f21fb4de4
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d2c828ee88b3e352fad3263f1e1ff901a41fc7a6 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d2c828ee88b3e352fad3263f1e1ff901a41fc7a6
new file mode 100644
index 0000000000..3052b6562e
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d2c828ee88b3e352fad3263f1e1ff901a41fc7a6
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d3124f8fe39ebe943d0d5a7087a51d7e852505bd b/test/core/end2end/fuzzers/api_fuzzer_corpus/d3124f8fe39ebe943d0d5a7087a51d7e852505bd
new file mode 100644
index 0000000000..50760fa59e
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d3124f8fe39ebe943d0d5a7087a51d7e852505bd
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d333dc3999c6dcca82d85f72e65e10c07f12d978 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d333dc3999c6dcca82d85f72e65e10c07f12d978
new file mode 100644
index 0000000000..9086fb3d5f
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d333dc3999c6dcca82d85f72e65e10c07f12d978
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/d91e9bf6b6c78f35a68ba877f3325b3c1ee3db35 b/test/core/end2end/fuzzers/api_fuzzer_corpus/d91e9bf6b6c78f35a68ba877f3325b3c1ee3db35
new file mode 100644
index 0000000000..6386318aac
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/d91e9bf6b6c78f35a68ba877f3325b3c1ee3db35
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/da23c62c70f6c1174adc08093c429f1ec657921a b/test/core/end2end/fuzzers/api_fuzzer_corpus/da23c62c70f6c1174adc08093c429f1ec657921a
new file mode 100644
index 0000000000..8ec7fecc6e
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/da23c62c70f6c1174adc08093c429f1ec657921a
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dd0e562fcf5edda051585b70d3b3780a9a6a2818 b/test/core/end2end/fuzzers/api_fuzzer_corpus/dd0e562fcf5edda051585b70d3b3780a9a6a2818
new file mode 100644
index 0000000000..6cc90395bd
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/dd0e562fcf5edda051585b70d3b3780a9a6a2818
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/dddf3303e3e8e558ca6f147ec11d8195b6de30bb b/test/core/end2end/fuzzers/api_fuzzer_corpus/dddf3303e3e8e558ca6f147ec11d8195b6de30bb
new file mode 100644
index 0000000000..cc23afee50
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/dddf3303e3e8e558ca6f147ec11d8195b6de30bb
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/de838de0352fc7ee32452bc83043cf587176e120 b/test/core/end2end/fuzzers/api_fuzzer_corpus/de838de0352fc7ee32452bc83043cf587176e120
new file mode 100644
index 0000000000..5f84542818
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/de838de0352fc7ee32452bc83043cf587176e120
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/df949398b0b614309219c4128b167746e16a1ead b/test/core/end2end/fuzzers/api_fuzzer_corpus/df949398b0b614309219c4128b167746e16a1ead
new file mode 100644
index 0000000000..229971071f
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/df949398b0b614309219c4128b167746e16a1ead
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e1a0398910c28ad61e065e98e884a7492f6dc594 b/test/core/end2end/fuzzers/api_fuzzer_corpus/e1a0398910c28ad61e065e98e884a7492f6dc594
new file mode 100644
index 0000000000..71cdbf08d9
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/e1a0398910c28ad61e065e98e884a7492f6dc594
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/e42a9e07845680b8aad95408657c87b01873bcbe b/test/core/end2end/fuzzers/api_fuzzer_corpus/e42a9e07845680b8aad95408657c87b01873bcbe
new file mode 100644
index 0000000000..60e70cbd38
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/e42a9e07845680b8aad95408657c87b01873bcbe
@@ -0,0 +1 @@
+S. \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ea351febbe2c4e73fb0e0d34e7d2a23ff46b79f4 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ea351febbe2c4e73fb0e0d34e7d2a23ff46b79f4
new file mode 100644
index 0000000000..28c93e6537
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ea351febbe2c4e73fb0e0d34e7d2a23ff46b79f4
@@ -0,0 +1 @@
+S. \ No newline at end of file
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ec012a94d14659f311451e89e757bd06a93d30b8 b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec012a94d14659f311451e89e757bd06a93d30b8
new file mode 100644
index 0000000000..f4f01ddf7f
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ec012a94d14659f311451e89e757bd06a93d30b8
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/ef930a505edebc0ff6ca7eef7549bbaa21d95b4a b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef930a505edebc0ff6ca7eef7549bbaa21d95b4a
new file mode 100644
index 0000000000..c6c53a949c
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/ef930a505edebc0ff6ca7eef7549bbaa21d95b4a
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f0a7e39c194ee3f30312ae2f4827bdbd43416a42 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f0a7e39c194ee3f30312ae2f4827bdbd43416a42
new file mode 100644
index 0000000000..e791177dde
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f0a7e39c194ee3f30312ae2f4827bdbd43416a42
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f1b592b7e1a5af83eea1bccc2d7bcca302173d57 b/test/core/end2end/fuzzers/api_fuzzer_corpus/f1b592b7e1a5af83eea1bccc2d7bcca302173d57
new file mode 100644
index 0000000000..3a65338b63
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f1b592b7e1a5af83eea1bccc2d7bcca302173d57
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f47f636b8e22e8db428ea956d9336bd12b928a9e b/test/core/end2end/fuzzers/api_fuzzer_corpus/f47f636b8e22e8db428ea956d9336bd12b928a9e
new file mode 100644
index 0000000000..75257d8c4f
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f47f636b8e22e8db428ea956d9336bd12b928a9e
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f4dc057d97c34f31ea542d67593b8d3a295bf52a b/test/core/end2end/fuzzers/api_fuzzer_corpus/f4dc057d97c34f31ea542d67593b8d3a295bf52a
new file mode 100644
index 0000000000..f1b3ac747a
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f4dc057d97c34f31ea542d67593b8d3a295bf52a
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f65e41c8021049c4ca8782902de25d6791bae63a b/test/core/end2end/fuzzers/api_fuzzer_corpus/f65e41c8021049c4ca8782902de25d6791bae63a
new file mode 100644
index 0000000000..2f0bb88442
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f65e41c8021049c4ca8782902de25d6791bae63a
Binary files differ
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/f73f63e243ea6484a97ece29bb8d4f33841410fc b/test/core/end2end/fuzzers/api_fuzzer_corpus/f73f63e243ea6484a97ece29bb8d4f33841410fc
new file mode 100644
index 0000000000..3f5fd07552
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/f73f63e243ea6484a97ece29bb8d4f33841410fc
Binary files differ