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:
|
default:
|
||||||
clang++ -std=c++17 -fsanitize=address,fuzzer -O3 WebSocket.cpp -o WebSocket
|
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 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 clientMaxWindowBits = 0;
|
||||||
|
|
||||||
int getToken(const char *&in, const char *stop) {
|
int getToken(const char *&in, const char *stop) {
|
||||||
while (!isalnum(*in) && in != stop) {
|
while (in != stop && !isalnum(*in)) {
|
||||||
in++;
|
in++;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hashedToken = 0;
|
int hashedToken = 0;
|
||||||
while (isalnum(*in) || *in == '-' || *in == '_') {
|
while (in != stop && (isalnum(*in) || *in == '-' || *in == '_')) {
|
||||||
if (isdigit(*in)) {
|
if (isdigit(*in)) {
|
||||||
hashedToken = hashedToken * 10 - (*in - '0');
|
hashedToken = hashedToken * 10 - (*in - '0');
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user