i2p.cpp
1 // Copyright (c) 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 <common/args.h> 6 #include <compat/compat.h> 7 #include <i2p.h> 8 #include <netaddress.h> 9 #include <netbase.h> 10 #include <test/fuzz/FuzzedDataProvider.h> 11 #include <test/fuzz/fuzz.h> 12 #include <test/fuzz/util.h> 13 #include <test/fuzz/util/net.h> 14 #include <test/fuzz/util/threadinterrupt.h> 15 #include <test/util/setup_common.h> 16 #include <test/util/time.h> 17 #include <util/fs_helpers.h> 18 #include <util/threadinterrupt.h> 19 20 void initialize_i2p() 21 { 22 static const auto testing_setup = MakeNoLogFileContext<>(); 23 } 24 25 FUZZ_TARGET(i2p, .init = initialize_i2p) 26 { 27 SeedRandomStateForTest(SeedRand::ZEROS); 28 FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()}; 29 30 NodeClockContext clock_ctx{ConsumeTime(fuzzed_data_provider)}; 31 32 // Mock CreateSock() to create FuzzedSock. 33 auto CreateSockOrig = CreateSock; 34 CreateSock = [&fuzzed_data_provider](int, int, int) { 35 return std::make_unique<FuzzedSock>(fuzzed_data_provider); 36 }; 37 38 const fs::path private_key_path = gArgs.GetDataDirNet() / "fuzzed_i2p_private_key"; 39 const CService addr{in6_addr(COMPAT_IN6ADDR_LOOPBACK_INIT), 7656}; 40 const Proxy sam_proxy{addr, /*tor_stream_isolation=*/false}; 41 auto interrupt{ConsumeThreadInterrupt(fuzzed_data_provider)}; 42 43 i2p::sam::Session session{private_key_path, sam_proxy, interrupt}; 44 i2p::Connection conn; 45 46 if (session.Listen(conn)) { 47 if (session.Accept(conn)) { 48 try { 49 (void)conn.sock->RecvUntilTerminator('\n', 10ms, *interrupt, i2p::sam::MAX_MSG_SIZE); 50 } catch (const std::runtime_error&) { 51 } 52 } 53 } 54 55 bool proxy_error; 56 57 if (session.Connect(CService{}, conn, proxy_error)) { 58 try { 59 conn.sock->SendComplete("verack\n", 10ms, *interrupt); 60 } catch (const std::runtime_error&) { 61 } 62 } 63 64 fs::remove(private_key_path); 65 66 CreateSock = CreateSockOrig; 67 }