From a969a3e53ea692ed1292a51bb39ee58c2b243153 Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Thu, 26 Dec 2019 16:22:20 +0100 Subject: [PATCH] Fix up router fuzz target --- fuzzing/Http.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/fuzzing/Http.cpp b/fuzzing/Http.cpp index 49e0952..f966f1e 100644 --- a/fuzzing/Http.cpp +++ b/fuzzing/Http.cpp @@ -20,25 +20,49 @@ struct StaticData { StaticData() { - router.add("get", "/:hello/:hi", [](RouterData &user, std::pair params) mutable { + router.add({"get"}, "/:hello/:hi", [](auto *h) mutable { + auto [paramsTop, params] = h->getParameters(); + + /* Something is horribly wrong */ + if (paramsTop != 1 || !params[0].length() || !params[1].length()) { + exit(-1); + } /* This route did handle it */ return true; }); - router.add("post", "/:hello/:hi/*", [](RouterData &user, std::pair params) mutable { + router.add({"post"}, "/:hello/:hi/*", [](auto *h) mutable { + auto [paramsTop, params] = h->getParameters(); + + /* Something is horribly wrong */ + if (paramsTop != 1 || !params[0].length() || !params[1].length()) { + exit(-1); + } /* This route did handle it */ return true; }); - router.add("get", "/*", [](RouterData &user, std::pair params) mutable { + router.add({"get"}, "/*", [](auto *h) mutable { + auto [paramsTop, params] = h->getParameters(); + + /* Something is horribly wrong */ + if (paramsTop != -1) { + exit(-1); + } /* This route did not handle it */ return false; }); - router.add("get", "/hi", [](RouterData &user, std::pair params) mutable { + router.add({"get"}, "/hi", [](auto *h) mutable { + auto [paramsTop, params] = h->getParameters(); + + /* Something is horribly wrong */ + if (paramsTop != -1) { + exit(-1); + } /* This route did handle it */ return true; @@ -70,8 +94,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { readBytes(httpRequest->getQuery()); /* Route the method and URL in two passes */ - StaticData::RouterData routerData = {}; - if (!staticData.router.route(httpRequest->getMethod(), httpRequest->getUrl(), routerData)) { + staticData.router.getUserData() = {}; + if (!staticData.router.route(httpRequest->getMethod(), httpRequest->getUrl())) { /* It was not handled */ return nullptr; }