Skip to content

Commit 08e10d0

Browse files
committed
fuzz: add CConnman::SocketHandler() to the tests
1 parent fcbe8e9 commit 08e10d0

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/test/fuzz/connman.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct CConnmanTest : public CConnman {
5757
return InitBinds(binds, white_binds, onion_binds);
5858
}
5959

60+
void SocketHandlerPublic() { SocketHandler(); }
6061
};
6162

6263
FUZZ_TARGET_INIT(connman, initialize_connman)
@@ -70,6 +71,23 @@ FUZZ_TARGET_INIT(connman, initialize_connman)
7071
return std::make_unique<FuzzedSock>(fuzzed_data_provider);
7172
};
7273

74+
// Mock SockWaitMany(), pretending random sockets are ready for the requested IO.
75+
auto SockWaitManyOrig = SockWaitMany;
76+
SockWaitMany = [&fuzzed_data_provider](Sockets& sockets, std::chrono::milliseconds) {
77+
auto RemoveRandomElements = [&fuzzed_data_provider](auto& set) {
78+
for (auto it = set.begin(); it != set.end();) {
79+
if (fuzzed_data_provider.ConsumeBool()) {
80+
it = set.erase(it);
81+
} else {
82+
++it;
83+
}
84+
}
85+
};
86+
RemoveRandomElements(sockets.recv);
87+
RemoveRandomElements(sockets.send);
88+
RemoveRandomElements(sockets.err);
89+
};
90+
7391
CConnmanTest connman{fuzzed_data_provider, *g_setup->m_node.addrman};
7492
CConnman::Options options;
7593
options.m_msgproc = g_setup->m_node.peerman.get();
@@ -210,6 +228,9 @@ FUZZ_TARGET_INIT(connman, initialize_connman)
210228
}
211229

212230
connman.InitBindsPublic(binds, white_binds, onion_binds);
231+
},
232+
[&] {
233+
connman.SocketHandlerPublic();
213234
});
214235
}
215236
(void)connman.GetAddedNodeInfo();
@@ -228,5 +249,6 @@ FUZZ_TARGET_INIT(connman, initialize_connman)
228249
(void)connman.GetTryNewOutboundPeer();
229250
(void)connman.GetUseAddrmanOutgoing();
230251

252+
SockWaitMany = SockWaitManyOrig;
231253
CreateSock = CreateSockOrig;
232254
}

0 commit comments

Comments
 (0)