MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / FUZZ_TARGET

Function FUZZ_TARGET

src/test/fuzz/txrequest.cpp:328–389  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

326} // namespace
327
328FUZZ_TARGET(txrequest)
329{
330 // Tester object (which encapsulates a TxRequestTracker).
331 Tester tester;
332
333 // Decode the input as a sequence of instructions with parameters
334 auto it = buffer.begin();
335 while (it != buffer.end()) {
336 int cmd = *(it++) % 11;
337 int peer, txidnum, delaynum;
338 switch (cmd) {
339 case 0: // Make time jump to the next event (m_time of CANDIDATE or REQUESTED)
340 tester.AdvanceToEvent();
341 break;
342 case 1: // Change time
343 delaynum = it == buffer.end() ? 0 : *(it++);
344 tester.AdvanceTime(DELAYS[delaynum]);
345 break;
346 case 2: // Query for requestable txs
347 peer = it == buffer.end() ? 0 : *(it++) % MAX_PEERS;
348 tester.GetRequestable(peer);
349 break;
350 case 3: // Peer went offline
351 peer = it == buffer.end() ? 0 : *(it++) % MAX_PEERS;
352 tester.DisconnectedPeer(peer);
353 break;
354 case 4: // No longer need tx
355 txidnum = it == buffer.end() ? 0 : *(it++);
356 tester.ForgetTxHash(txidnum % MAX_TXHASHES);
357 break;
358 case 5: // Received immediate preferred inv
359 case 6: // Same, but non-preferred.
360 peer = it == buffer.end() ? 0 : *(it++) % MAX_PEERS;
361 txidnum = it == buffer.end() ? 0 : *(it++);
362 tester.ReceivedInv(peer, txidnum % MAX_TXHASHES, (txidnum / MAX_TXHASHES) & 1, cmd & 1,
363 std::chrono::microseconds::min());
364 break;
365 case 7: // Received delayed preferred inv
366 case 8: // Same, but non-preferred.
367 peer = it == buffer.end() ? 0 : *(it++) % MAX_PEERS;
368 txidnum = it == buffer.end() ? 0 : *(it++);
369 delaynum = it == buffer.end() ? 0 : *(it++);
370 tester.ReceivedInv(peer, txidnum % MAX_TXHASHES, (txidnum / MAX_TXHASHES) & 1, cmd & 1,
371 tester.Now() + DELAYS[delaynum]);
372 break;
373 case 9: // Requested tx from peer
374 peer = it == buffer.end() ? 0 : *(it++) % MAX_PEERS;
375 txidnum = it == buffer.end() ? 0 : *(it++);
376 delaynum = it == buffer.end() ? 0 : *(it++);
377 tester.RequestedTx(peer, txidnum % MAX_TXHASHES, tester.Now() + DELAYS[delaynum]);
378 break;
379 case 10: // Received response
380 peer = it == buffer.end() ? 0 : *(it++) % MAX_PEERS;
381 txidnum = it == buffer.end() ? 0 : *(it++);
382 tester.ReceivedResponse(peer, txidnum % MAX_TXHASHES);
383 break;
384 default:
385 assert(false);

Callers

nothing calls this directly

Calls 12

AdvanceToEventMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
AdvanceTimeMethod · 0.45
GetRequestableMethod · 0.45
DisconnectedPeerMethod · 0.45
ForgetTxHashMethod · 0.45
ReceivedInvMethod · 0.45
NowMethod · 0.45
RequestedTxMethod · 0.45
ReceivedResponseMethod · 0.45
CheckMethod · 0.45

Tested by

no test coverage detected