Also fuzz the extensions negotiator
This commit is contained in:
@@ -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,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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user