Bitcoin Core 28.99.0
P2P Digital Currency
torcontrol.cpp
Go to the documentation of this file.
1// Copyright (c) 2020-2021 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
6#include <test/fuzz/fuzz.h>
7#include <test/fuzz/util.h>
9#include <torcontrol.h>
10
11#include <cstdint>
12#include <string>
13#include <vector>
14
16{
17public:
19 {
20 }
21
22 bool Connect(const std::string&, const ConnectionCB&, const ConnectionCB&)
23 {
24 return true;
25 }
26
28 {
29 }
30
31 bool Command(const std::string&, const ReplyHandlerCB&)
32 {
33 return true;
34 }
35};
36
38{
39 static const auto testing_setup = MakeNoLogFileContext<>();
40}
41
43{
44 FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
45
46 TorController tor_controller;
47 LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
48 TorControlReply tor_control_reply;
50 fuzzed_data_provider,
51 [&] {
52 tor_control_reply.code = 250;
53 },
54 [&] {
55 tor_control_reply.code = 510;
56 },
57 [&] {
58 tor_control_reply.code = fuzzed_data_provider.ConsumeIntegral<int>();
59 });
60 tor_control_reply.lines = ConsumeRandomLengthStringVector(fuzzed_data_provider);
61 if (tor_control_reply.lines.empty()) {
62 break;
63 }
64 DummyTorControlConnection dummy_tor_control_connection;
66 fuzzed_data_provider,
67 [&] {
68 tor_controller.add_onion_cb(dummy_tor_control_connection, tor_control_reply);
69 },
70 [&] {
71 tor_controller.auth_cb(dummy_tor_control_connection, tor_control_reply);
72 },
73 [&] {
74 tor_controller.authchallenge_cb(dummy_tor_control_connection, tor_control_reply);
75 },
76 [&] {
77 tor_controller.protocolinfo_cb(dummy_tor_control_connection, tor_control_reply);
78 });
79 }
80}
bool Command(const std::string &, const ReplyHandlerCB &)
Definition: torcontrol.cpp:31
bool Connect(const std::string &, const ConnectionCB &, const ConnectionCB &)
Definition: torcontrol.cpp:22
Low-level handling for Tor control connection.
Definition: torcontrol.h:52
std::function< void(TorControlConnection &, const TorControlReply &)> ReplyHandlerCB
Definition: torcontrol.h:55
std::function< void(TorControlConnection &)> ConnectionCB
Definition: torcontrol.h:54
Reply from Tor, can be single or multi-line.
Definition: torcontrol.h:34
std::vector< std::string > lines
Definition: torcontrol.h:39
Controller that connects to Tor control socket, authenticate, then create and maintain an ephemeral o...
Definition: torcontrol.h:107
void add_onion_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for ADD_ONION result.
Definition: torcontrol.cpp:420
void authchallenge_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHCHALLENGE result.
Definition: torcontrol.cpp:506
void auth_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHENTICATE result.
Definition: torcontrol.cpp:455
void protocolinfo_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for PROTOCOLINFO result.
Definition: torcontrol.cpp:541
#define LIMITED_WHILE(condition, limit)
Can be used to limit a theoretically unbounded loop.
Definition: fuzz.h:22
void initialize_torcontrol()
Definition: torcontrol.cpp:37
FUZZ_TARGET(torcontrol,.init=initialize_torcontrol)
Definition: torcontrol.cpp:42
size_t CallOneOf(FuzzedDataProvider &fuzzed_data_provider, Callables... callables)
Definition: util.h:35
std::vector< std::string > ConsumeRandomLengthStringVector(FuzzedDataProvider &fuzzed_data_provider, const size_t max_vector_size=16, const size_t max_string_length=16) noexcept
Definition: util.h:78