mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-09-12 13:42:10 +02:00
TorControlConnection and HTTPRemoteClient have been updated to use std::string receive buffers which mirrors approach in HTTPClient::ReadResponse().
51 lines
1.7 KiB
C++
51 lines
1.7 KiB
C++
// Copyright (c) 2020-present The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <httpserver.h>
|
|
#include <netaddress.h>
|
|
#include <test/fuzz/FuzzedDataProvider.h>
|
|
#include <test/fuzz/fuzz.h>
|
|
#include <test/fuzz/util.h>
|
|
#include <util/signalinterrupt.h>
|
|
#include <util/strencodings.h>
|
|
|
|
#include <cassert>
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
|
|
std::string_view RequestMethodString(HTTPRequestMethod m);
|
|
|
|
FUZZ_TARGET(http_request)
|
|
{
|
|
using http_bitcoin::HTTPRequest;
|
|
using http_bitcoin::MAX_HEADERS_SIZE;
|
|
using util::LineReader;
|
|
|
|
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
|
const std::string http_buffer{fuzzed_data_provider.ConsumeRandomLengthString(4096)};
|
|
|
|
HTTPRequest http_request;
|
|
LineReader reader(http_buffer, MAX_HEADERS_SIZE);
|
|
try {
|
|
if (!http_request.LoadControlData(reader)) return;
|
|
if (!http_request.LoadHeaders(reader)) return;
|
|
if (!http_request.LoadBody(reader)) return;
|
|
} catch (const std::runtime_error&) {
|
|
return;
|
|
}
|
|
|
|
const HTTPRequestMethod request_method = http_request.GetRequestMethod();
|
|
(void)RequestMethodString(request_method);
|
|
(void)http_request.GetURI();
|
|
(void)http_request.GetHeader("Host");
|
|
std::string header = fuzzed_data_provider.ConsumeRandomLengthString(16);
|
|
(void)http_request.GetHeader(header);
|
|
(void)http_request.WriteHeader(std::string(header), fuzzed_data_provider.ConsumeRandomLengthString(16));
|
|
(void)http_request.GetHeader(header);
|
|
const std::string body = http_request.ReadBody();
|
|
assert(body.empty());
|
|
}
|