torcontrol.cpp
1 // Copyright (c) 2020-present 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 class DummyTorControlConnection : public TorControlConnection 16 { 17 public: 18 DummyTorControlConnection() : TorControlConnection{nullptr} 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 37 void initialize_torcontrol() 38 { 39 static const auto testing_setup = MakeNoLogFileContext<>(); 40 } 41 42 FUZZ_TARGET(torcontrol, .init = initialize_torcontrol) 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 }