| 9 | #include <boost/beast/_experimental/test/stream.hpp> |
| 10 | |
| 11 | extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) |
| 12 | { |
| 13 | using namespace boost::beast; |
| 14 | |
| 15 | error_code ec; |
| 16 | flat_buffer buffer; |
| 17 | net::io_context ioc; |
| 18 | test::stream remote{ioc}; |
| 19 | |
| 20 | websocket::stream<test::stream> ws{ |
| 21 | ioc, string_view{reinterpret_cast<const char*>(data), size}}; |
| 22 | |
| 23 | ws.set_option(websocket::stream_base::decorator( |
| 24 | [](websocket::response_type& res) |
| 25 | { |
| 26 | res.set(http::field::server, "websocket-server-sync"); |
| 27 | })); |
| 28 | |
| 29 | websocket::permessage_deflate pd; |
| 30 | pd.server_enable = (size % 2) != 0; |
| 31 | pd.compLevel = static_cast<int>(size % 9); |
| 32 | ws.set_option(pd); |
| 33 | |
| 34 | ws.next_layer().connect(remote); |
| 35 | ws.next_layer().close_remote(); |
| 36 | ws.accept(ec); |
| 37 | |
| 38 | if(!ec) |
| 39 | { |
| 40 | ws.read(buffer, ec); |
| 41 | ws.text(ws.got_text()); |
| 42 | ws.write(buffer.data(), ec); |
| 43 | } |
| 44 | |
| 45 | return 0; |
| 46 | } |