/* * # Copyright 2020 Google Inc. * # * # Licensed under the Apache License, Version 2.0 (the "License"); * # you may not use this file except in compliance with the License. * # You may obtain a copy of the License at * # * # http://www.apache.org/licenses/LICENSE-2.0 * # * # Unless required by applicable law or agreed to in writing, software * # distributed under the License is distributed on an "AS IS" BASIS, * # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * # See the License for the specific language governing permissions and * # limitations under the License. * # * ################################################################################ * */ #define HPACK_STANDALONE #include #include #include #include #include #include #include #include #include #include #define MAX_RQ_SIZE 65536 #define MAX_HDR_NUM 1000 char hex[MAX_RQ_SIZE*3+3]; // enough for "[ XX]* \0" uint8_t buf[MAX_RQ_SIZE]; char trash_buf[MAX_RQ_SIZE]; char tmp_buf[MAX_RQ_SIZE]; struct buffer tmp = { .area = tmp_buf, .data = 0, .size = sizeof(tmp_buf) }; /* Empty function we dont need - we just need a callback */ void debug_hexdump(FILE *out, const char *pfx, const char *buf, unsigned int baseaddr, int len) { } // These must be included here #include "../src/hpack-huff.c" #include "../src/hpack-tbl.c" #include "../src/hpack-dec.c" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size){ char *new_str = (char *)malloc(size+1); struct hpack_dht *dht; struct pool_head pool; int dht_size = 4096; if (new_str == NULL){ return 0; } memcpy(new_str, data, size); new_str[size] = '\0'; struct http_hdr list[MAX_HDR_NUM]; pool.size = dht_size; pool_head_hpack_tbl = &pool; dht = hpack_dht_alloc(); if (dht != NULL) { hpack_decode_frame(dht, new_str, size, list,sizeof(list)/sizeof(list[0]), &tmp); if (dht != NULL) { free(dht); } } free(new_str); return 0; }