From 3ca969ce858fe9b81813c5cab51838e7a3dd3e7d Mon Sep 17 00:00:00 2001 From: dmiller Date: Fri, 21 Aug 2026 01:14:27 +0000 Subject: [PATCH] Fuzzer for various hex-related utility functions --- fuzz/.gitignore | 2 ++ fuzz/fuzz_hexutils.cc | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 fuzz/fuzz_hexutils.cc diff --git a/fuzz/.gitignore b/fuzz/.gitignore index 2a310568d..38fe14e5c 100644 --- a/fuzz/.gitignore +++ b/fuzz/.gitignore @@ -3,4 +3,6 @@ fuzz_dns_packet_parseFromBuffer fuzz_ippackethdrinfo fuzz_traceroute_decode_reply fuzz_gettcpopt_ts +fuzz_validatepkt +fuzz_hexutils corpus/ diff --git a/fuzz/fuzz_hexutils.cc b/fuzz/fuzz_hexutils.cc new file mode 100644 index 000000000..b68f569cb --- /dev/null +++ b/fuzz/fuzz_hexutils.cc @@ -0,0 +1,31 @@ +#include "common.h" +#include "../output.h" +#include "../utils.h" + +#include +#include + +extern "C" +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + fuzz_init(); + unsigned int newlen = 0; + char *cbuf = new char[size + 1]; + memcpy(cbuf, data, size); + cbuf[size] = '\0'; + char *cdata = cstring_unescape(cbuf, &newlen); + int bufsize = newlen * 4 + newlen / 8 + 1; + char *buf = new char[bufsize]; + + bintohexstr(buf, bufsize, cdata, (int)newlen); + size_t phs_len = 0; + u8 *phs_buf = parse_hex_string(buf, &phs_len); + if (phs_buf != NULL) { + volatile std::string safe = protect_xml(std::string((char *)phs_buf, phs_len)); + (void) safe; + } + + delete[] buf; + delete[] cbuf; + return 0; +}