Bitcoin Core  22.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 {
17 public:
19  {
20  }
21 
22  bool Connect(const std::string&, const ConnectionCB&, const ConnectionCB&)
23  {
24  return true;
25  }
26 
27  void Disconnect()
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  while (fuzzed_data_provider.ConsumeBool()) {
48  TorControlReply tor_control_reply;
49  CallOneOf(
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;
65  CallOneOf(
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 }
TorControlReply
Reply from Tor, can be single or multi-line.
Definition: torcontrol.h:37
ConsumeRandomLengthStringVector
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:79
TorControlReply::code
int code
Definition: torcontrol.h:42
FUZZ_TARGET_INIT
FUZZ_TARGET_INIT(torcontrol, initialize_torcontrol)
Definition: torcontrol.cpp:42
TorController::protocolinfo_cb
void protocolinfo_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for PROTOCOLINFO result.
Definition: torcontrol.cpp:460
setup_common.h
TorControlConnection::ConnectionCB
std::function< void(TorControlConnection &)> ConnectionCB
Definition: torcontrol.h:58
TorControlConnection
Low-level handling for Tor control connection.
Definition: torcontrol.h:55
util.h
DummyTorControlConnection::DummyTorControlConnection
DummyTorControlConnection()
Definition: torcontrol.cpp:18
DummyTorControlConnection
Definition: torcontrol.cpp:15
TorController::add_onion_cb
void add_onion_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for ADD_ONION result.
Definition: torcontrol.cpp:336
CallOneOf
size_t CallOneOf(FuzzedDataProvider &fuzzed_data_provider, Callables... callables)
Definition: util.h:40
DummyTorControlConnection::Disconnect
void Disconnect()
Definition: torcontrol.cpp:27
FuzzedDataProvider.h
TorControlConnection::ReplyHandlerCB
std::function< void(TorControlConnection &, const TorControlReply &)> ReplyHandlerCB
Definition: torcontrol.h:59
TorControlReply::lines
std::vector< std::string > lines
Definition: torcontrol.h:43
TorController::auth_cb
void auth_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHENTICATE result.
Definition: torcontrol.cpp:371
DummyTorControlConnection::Connect
bool Connect(const std::string &, const ConnectionCB &, const ConnectionCB &)
Definition: torcontrol.cpp:22
torcontrol.h
fuzz.h
FuzzedDataProvider
Definition: FuzzedDataProvider.h:31
TorController::authchallenge_cb
void authchallenge_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHCHALLENGE result.
Definition: torcontrol.cpp:425
TorController
Controller that connects to Tor control socket, authenticate, then create and maintain an ephemeral o...
Definition: torcontrol.h:112
DummyTorControlConnection::Command
bool Command(const std::string &, const ReplyHandlerCB &)
Definition: torcontrol.cpp:31
initialize_torcontrol
void initialize_torcontrol()
Definition: torcontrol.cpp:37