Merge commit 'c992cb4e42cc223f67ede0e48d7ff3f4947af0c6' as 'test/compatibility/C/uWebSockets'
This commit is contained in:
59
test/compatibility/C/uWebSockets/fuzzing/WebSocket.cpp
Normal file
59
test/compatibility/C/uWebSockets/fuzzing/WebSocket.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
/* This is a fuzz test of the websocket parser */
|
||||
|
||||
#define WIN32_EXPORT
|
||||
|
||||
#include "helpers.h"
|
||||
|
||||
/* We test the websocket parser */
|
||||
#include "../src/WebSocketProtocol.h"
|
||||
|
||||
struct Impl {
|
||||
static bool refusePayloadLength(uint64_t length, uWS::WebSocketState<true> *wState, void *s) {
|
||||
|
||||
/* We need a limit */
|
||||
if (length > 16000) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Return ok */
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool setCompressed(uWS::WebSocketState<true> *wState, void *s) {
|
||||
/* We support it */
|
||||
return true;
|
||||
}
|
||||
|
||||
static void forceClose(uWS::WebSocketState<true> *wState, void *s) {
|
||||
|
||||
}
|
||||
|
||||
static bool handleFragment(char *data, size_t length, unsigned int remainingBytes, int opCode, bool fin, uWS::WebSocketState<true> *webSocketState, void *s) {
|
||||
|
||||
if (opCode == uWS::TEXT) {
|
||||
if (!uWS::protocol::isValidUtf8((unsigned char *)data, length)) {
|
||||
/* Return break */
|
||||
return true;
|
||||
}
|
||||
} else if (opCode == uWS::CLOSE) {
|
||||
uWS::protocol::parseClosePayload((char *)data, length);
|
||||
}
|
||||
|
||||
/* Return ok */
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
/* Create the parser state */
|
||||
uWS::WebSocketState<true> state;
|
||||
|
||||
makeChunked(makePadded(data, size), size, [&state](const uint8_t *data, size_t size) {
|
||||
/* Parse it */
|
||||
uWS::WebSocketProtocol<true, Impl>::consume((char *) data, size, &state, nullptr);
|
||||
});
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user