summaryrefslogtreecommitdiff
path: root/fuzzer/ClientSession.cpp
blob: 31f8d07f8cc060742ed5179e8b2a92bb8f9ccad6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>

#include "ClientSession.hpp"

bool DoInitialization()
{
    LOOLWSD::ChildRoot = "/fuzz/child-root";
    return true;
}

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{
    static bool initialized = DoInitialization();
    (void)initialized;

    std::string uri;
    Poco::URI uriPublic;
    std::string docKey = "/fuzz/fuzz.odt";
    auto docBroker = std::make_shared<DocumentBroker>(DocumentBroker::ChildType::Interactive, uri,
                                                      uriPublic, docKey);

    std::shared_ptr<ProtocolHandlerInterface> ws;
    std::string id;
    bool isReadOnly = false;
    Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uri,
                                   Poco::Net::HTTPMessage::HTTP_1_1);
    request.setHost("localhost:9980");
    const RequestDetails requestDetails(request, "");
    auto session
        = std::make_shared<ClientSession>(ws, id, docBroker, uriPublic, isReadOnly, requestDetails);

    std::string input(reinterpret_cast<const char*>(data), size);
    std::stringstream ss(input);
    std::string line;
    while (std::getline(ss, line, '\n'))
    {
        std::vector<char> lineVector(line.data(), line.data() + line.size());
        session->handleMessage(lineVector);
    }

    // Make sure SocketPoll::_newCallbacks does not grow forever, leading to OOM.
    Admin::instance().poll(0);
    return 0;
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */