Also fuzz the extensions negotiator

This commit is contained in:
Alex Hultman
2019-03-13 16:59:04 +01:00
parent a9c9dd4a7d
commit 0e0d796cfd
3 changed files with 42 additions and 2 deletions
+39
View File
@@ -0,0 +1,39 @@
/* This is a fuzz test of the websocket extensions parser */
#define WIN32_EXPORT
#include <cstdio>
#include <string>
/* We test the websocket extensions parser */
#include "../src/WebSocketExtensions.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
{
uWS::ExtensionsNegotiator<true> extensionsNegotiator(uWS::Options::PERMESSAGE_DEFLATE);
extensionsNegotiator.readOffer({(char *) data, size});
extensionsNegotiator.generateOffer();
extensionsNegotiator.getNegotiatedOptions();
}
{
uWS::ExtensionsNegotiator<true> extensionsNegotiator(uWS::Options::NO_OPTIONS);
extensionsNegotiator.readOffer({(char *) data, size});
extensionsNegotiator.generateOffer();
extensionsNegotiator.getNegotiatedOptions();
}
{
uWS::ExtensionsNegotiator<true> extensionsNegotiator(uWS::Options::CLIENT_NO_CONTEXT_TAKEOVER);
extensionsNegotiator.readOffer({(char *) data, size});
extensionsNegotiator.generateOffer();
extensionsNegotiator.getNegotiatedOptions();
}
return 0;
}
+1
View File
@@ -1,3 +1,4 @@
default:
clang++ -std=c++17 -fsanitize=address,fuzzer -O3 WebSocket.cpp -o WebSocket
clang++ -std=c++17 -fsanitize=address,fuzzer -O3 Http.cpp -o Http
clang++ -std=c++17 -fsanitize=address,fuzzer -O3 Extensions.cpp -o Extensions
+2 -2
View File
@@ -51,12 +51,12 @@ public:
int clientMaxWindowBits = 0;
int getToken(const char *&in, const char *stop) {
while (!isalnum(*in) && in != stop) {
while (in != stop && !isalnum(*in)) {
in++;
}
int hashedToken = 0;
while (isalnum(*in) || *in == '-' || *in == '_') {
while (in != stop && (isalnum(*in) || *in == '-' || *in == '_')) {
if (isdigit(*in)) {
hashedToken = hashedToken * 10 - (*in - '0');
} else {