From 8ccde068ad26daae9be96905b05f8db5d25d8d86 Mon Sep 17 00:00:00 2001 From: Jon Shallow Date: Wed, 12 Apr 2023 10:22:02 +0100 Subject: [PATCH] oss-fuzz: Parse PDUs for TCP and WebSockets --- tests/oss-fuzz/pdu_parse_tcp_target.c | 23 +++++++++++++++++++ ..._parse_target.c => pdu_parse_udp_target.c} | 4 ++-- tests/oss-fuzz/pdu_parse_ws_target.c | 23 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 tests/oss-fuzz/pdu_parse_tcp_target.c rename tests/oss-fuzz/{pdu_parse_target.c => pdu_parse_udp_target.c} (87%) create mode 100644 tests/oss-fuzz/pdu_parse_ws_target.c diff --git a/tests/oss-fuzz/pdu_parse_tcp_target.c b/tests/oss-fuzz/pdu_parse_tcp_target.c new file mode 100644 index 00000000..8120b5bc --- /dev/null +++ b/tests/oss-fuzz/pdu_parse_tcp_target.c @@ -0,0 +1,23 @@ +#include + +/* Declare prototype for internal function coap_pdu_encode_header() */ +size_t coap_pdu_encode_header(coap_pdu_t *, coap_proto_t); + +int +LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + coap_pdu_t *pdu = coap_pdu_init(0, 0, 0, size); + if (pdu) { + coap_set_log_level(COAP_LOG_ERR); + if (coap_pdu_parse(COAP_PROTO_TCP, data, size, pdu)) { + coap_string_t *query = coap_get_query(pdu); + coap_string_t *uri_path = coap_get_uri_path(pdu); + coap_show_pdu(COAP_LOG_ERR, pdu); + coap_pdu_encode_header(pdu, COAP_PROTO_TCP); + + coap_delete_string(query); + coap_delete_string(uri_path); + } + coap_delete_pdu(pdu); + } + return 0; +} diff --git a/tests/oss-fuzz/pdu_parse_target.c b/tests/oss-fuzz/pdu_parse_udp_target.c similarity index 87% rename from tests/oss-fuzz/pdu_parse_target.c rename to tests/oss-fuzz/pdu_parse_udp_target.c index d3e431ce..4c586c2b 100644 --- a/tests/oss-fuzz/pdu_parse_target.c +++ b/tests/oss-fuzz/pdu_parse_udp_target.c @@ -7,11 +7,11 @@ int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { coap_pdu_t *pdu = coap_pdu_init(0, 0, 0, size); if (pdu) { - coap_set_log_level(COAP_LOG_DEBUG); + coap_set_log_level(COAP_LOG_ERR); if (coap_pdu_parse(COAP_PROTO_UDP, data, size, pdu)) { coap_string_t *query = coap_get_query(pdu); coap_string_t *uri_path = coap_get_uri_path(pdu); - coap_show_pdu(COAP_LOG_DEBUG, pdu); + coap_show_pdu(COAP_LOG_ERR, pdu); coap_pdu_encode_header(pdu, COAP_PROTO_UDP); coap_delete_string(query); diff --git a/tests/oss-fuzz/pdu_parse_ws_target.c b/tests/oss-fuzz/pdu_parse_ws_target.c new file mode 100644 index 00000000..04f2fc6a --- /dev/null +++ b/tests/oss-fuzz/pdu_parse_ws_target.c @@ -0,0 +1,23 @@ +#include + +/* Declare prototype for internal function coap_pdu_encode_header() */ +size_t coap_pdu_encode_header(coap_pdu_t *, coap_proto_t); + +int +LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + coap_pdu_t *pdu = coap_pdu_init(0, 0, 0, size); + if (pdu) { + coap_set_log_level(COAP_LOG_ERR); + if (coap_pdu_parse(COAP_PROTO_WS, data, size, pdu)) { + coap_string_t *query = coap_get_query(pdu); + coap_string_t *uri_path = coap_get_uri_path(pdu); + coap_show_pdu(COAP_LOG_ERR, pdu); + coap_pdu_encode_header(pdu, COAP_PROTO_WS); + + coap_delete_string(query); + coap_delete_string(uri_path); + } + coap_delete_pdu(pdu); + } + return 0; +}