Branch data Line data Source code
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 : :
5 : : #include <test/fuzz/FuzzedDataProvider.h>
6 : : #include <test/fuzz/fuzz.h>
7 : : #include <test/fuzz/util.h>
8 : : #include <test/util/setup_common.h>
9 : : #include <torcontrol.h>
10 : :
11 : : #include <cstdint>
12 : : #include <string>
13 : : #include <vector>
14 : :
15 : 122977 : class DummyTorControlConnection : public TorControlConnection
16 : : {
17 : : public:
18 : 122977 : DummyTorControlConnection() : TorControlConnection{nullptr}
19 : : {
20 : 122977 : }
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 : :
37 : 1 : void initialize_torcontrol()
38 : : {
39 [ + - + - ]: 2 : static const auto testing_setup = MakeNoLogFileContext<>();
40 [ + - ]: 2 : }
41 : :
42 [ + - ]: 764 : FUZZ_TARGET(torcontrol, .init = initialize_torcontrol)
43 : : {
44 : 352 : FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
45 : :
46 : 352 : TorController tor_controller;
47 [ + + + + ]: 123329 : LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) {
48 : 123009 : TorControlReply tor_control_reply;
49 : 123009 : CallOneOf(
50 : : fuzzed_data_provider,
51 : 73612 : [&] {
52 : 73612 : tor_control_reply.code = 250;
53 : 73612 : },
54 : 44223 : [&] {
55 : 44223 : tor_control_reply.code = 510;
56 : 44223 : },
57 : 5174 : [&] {
58 : 5174 : tor_control_reply.code = fuzzed_data_provider.ConsumeIntegral<int>();
59 : 5174 : });
60 : 123009 : tor_control_reply.lines = ConsumeRandomLengthStringVector(fuzzed_data_provider);
61 [ + + ]: 123009 : if (tor_control_reply.lines.empty()) {
62 : : break;
63 : : }
64 [ + - ]: 122977 : DummyTorControlConnection dummy_tor_control_connection;
65 [ + - ]: 122977 : CallOneOf(
66 : : fuzzed_data_provider,
67 : 31784 : [&] {
68 : 31784 : tor_controller.add_onion_cb(dummy_tor_control_connection, tor_control_reply);
69 : 31784 : },
70 : 9963 : [&] {
71 : 9963 : tor_controller.auth_cb(dummy_tor_control_connection, tor_control_reply);
72 : 9963 : },
73 : 19667 : [&] {
74 : 19667 : tor_controller.authchallenge_cb(dummy_tor_control_connection, tor_control_reply);
75 : 19667 : },
76 : 61563 : [&] {
77 : 61563 : tor_controller.protocolinfo_cb(dummy_tor_control_connection, tor_control_reply);
78 : 61563 : });
79 : 123009 : }
80 : 352 : }
|