From 71a7f12e8a764b5416cf00c3725fd8cb66d5d27e Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Fri, 19 Jun 2026 18:59:08 +0100 Subject: [PATCH] OSS-Fuzz: Add new fuzzer targets datetime processing Signed-off-by: Arthur Chan --- fuzz/CMakeLists.txt | 2 ++ fuzz/fuzz-datetime.C | 37 +++++++++++++++++++++++++++++ fuzz/fuzz-datetime_seed_corpus.zip | Bin 0 -> 882 bytes 3 files changed, 39 insertions(+) create mode 100644 fuzz/fuzz-datetime.C create mode 100644 fuzz/fuzz-datetime_seed_corpus.zip diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt index 71d2b5f2f..df9b6b58d 100644 --- a/fuzz/CMakeLists.txt +++ b/fuzz/CMakeLists.txt @@ -2,6 +2,7 @@ INCLUDE_DIRECTORIES(${WT_SOURCE_DIR}/src) ADD_EXECUTABLE(fuzz-cgi fuzz-cgi.C) ADD_EXECUTABLE(fuzz-css fuzz-css.C) +ADD_EXECUTABLE(fuzz-datetime fuzz-datetime.C) ADD_EXECUTABLE(fuzz-eval fuzz-eval.C) ADD_EXECUTABLE(fuzz-http fuzz-http.C) ADD_EXECUTABLE(fuzz-json fuzz-json.C) @@ -10,6 +11,7 @@ ADD_EXECUTABLE(fuzz-xml fuzz-xml.C) TARGET_LINK_LIBRARIES(fuzz-cgi PRIVATE wt $ENV{LIB_FUZZING_ENGINE}) TARGET_LINK_LIBRARIES(fuzz-css PRIVATE wt $ENV{LIB_FUZZING_ENGINE}) +TARGET_LINK_LIBRARIES(fuzz-datetime PRIVATE wt $ENV{LIB_FUZZING_ENGINE}) TARGET_LINK_LIBRARIES(fuzz-eval PRIVATE wt $ENV{LIB_FUZZING_ENGINE}) TARGET_LINK_LIBRARIES(fuzz-http PRIVATE wt wthttp $ENV{LIB_FUZZING_ENGINE}) TARGET_LINK_LIBRARIES(fuzz-json PRIVATE wt $ENV{LIB_FUZZING_ENGINE}) diff --git a/fuzz/fuzz-datetime.C b/fuzz/fuzz-datetime.C new file mode 100644 index 000000000..72297772e --- /dev/null +++ b/fuzz/fuzz-datetime.C @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2026 Emweb bv, Herent, Belgium. + * + * See the LICENSE file for terms of use. + */ + +#include +#include +#include + +#include "Wt/WString.h" +#include "Wt/WDate.h" +#include "Wt/WTime.h" +#include "Wt/WDateTime.h" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + if (size < 1) + return 0; + + // First byte splits the remaining bytes into a format string and a value + // string, so both the format parser and the value parser get fuzzed. + std::size_t formatLen = data[0] % size; + std::string format(reinterpret_cast(data + 1), formatLen); + std::string value(reinterpret_cast(data + 1 + formatLen), + size - 1 - formatLen); + + Wt::WString f = Wt::WString::fromUTF8(format); + Wt::WString v = Wt::WString::fromUTF8(value); + + try { Wt::WDateTime::fromString(v, f); } catch (...) {} + try { Wt::WDate::fromString(v, f); } catch (...) {} + try { Wt::WTime::fromString(v, f); } catch (...) {} + try { Wt::WDateTime::fromString(v); } catch (...) {} + + return 0; +} diff --git a/fuzz/fuzz-datetime_seed_corpus.zip b/fuzz/fuzz-datetime_seed_corpus.zip new file mode 100644 index 0000000000000000000000000000000000000000..f5f56ec4bad0a4103d07c3c4e639e845744e093d GIT binary patch literal 882 zcmWIWW@h1H0D+ommt!u42}~6QvO$=GL53kEu_QG}N`o6yUl|W!@sBdVbZ)j<08GvH!hEKWOoR8O7kb%0szPc$XMg~S^ zx&~&thG@pFnRn-*9MGj8%n5UCPJUiGK6Cj}Qc@IreSH;D6hJnFr=}=)mF6iJS}K67 zL3Q`4*KAAGfrf)HFVupP%-q!Yw9=d$e3l3!9IxQvVU?R}Ra}hlg@U26m5Hg9u>q=W zbpi`N2?A{bVNl?MZOX_k#%B=+%yfj2j7)OOxMEZSXfy)@BM@(C1hEkD%L<8Kw73oM zMl}sJB9ToChnWVBR^m)UjX#KKAXjZ^Tn94^5}U*shZc+!1FaYLp=R bw-#t5B7$(4#>xir4=WJ%0M%arVg?2P-;B!J literal 0 HcmV?d00001