Bitcoin Core  27.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  LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
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 }
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:416
void authchallenge_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHCHALLENGE result.
Definition: torcontrol.cpp:502
void auth_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for AUTHENTICATE result.
Definition: torcontrol.cpp:451
void protocolinfo_cb(TorControlConnection &conn, const TorControlReply &reply)
Callback for PROTOCOLINFO result.
Definition: torcontrol.cpp:537
#define LIMITED_WHILE(condition, limit)
Can be used to limit a theoretically unbounded loop.
Definition: fuzz.h:23
void initialize_torcontrol()
Definition: torcontrol.cpp:37
FUZZ_TARGET(torcontrol,.init=initialize_torcontrol)
Definition: torcontrol.cpp:42
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
size_t CallOneOf(FuzzedDataProvider &fuzzed_data_provider, Callables... callables)
Definition: util.h:35