Skip to content

Commit

Permalink
merge bitcoin#24692: Follow-ups to bitcoin#21160
Browse files Browse the repository at this point in the history
  • Loading branch information
kwvg committed Apr 26, 2024
1 parent 33098ae commit c89799d
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 12 deletions.
27 changes: 17 additions & 10 deletions src/net_processing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ class PeerManagerImpl final : public PeerManager
void SendBlockTransactions(CNode& pfrom, const CBlock& block, const BlockTransactionsRequest& req);

/** Send a version message to a peer */
void PushNodeVersion(CNode& pnode, Peer& peer);
void PushNodeVersion(CNode& pnode, const Peer& peer);

/** Send a ping message every PING_INTERVAL or if requested via RPC. May
* mark the peer to be disconnected if a ping has timed out.
Expand Down Expand Up @@ -1215,7 +1215,7 @@ void PeerManagerImpl::FindNextBlocksToDownload(NodeId nodeid, unsigned int count
}
} // namespace

void PeerManagerImpl::PushNodeVersion(CNode& pnode, Peer& peer)
void PeerManagerImpl::PushNodeVersion(CNode& pnode, const Peer& peer)
{
const auto& params = Params();

Expand Down Expand Up @@ -3369,8 +3369,10 @@ void PeerManagerImpl::ProcessMessage(
pfrom.m_limited_node = (!(nServices & NODE_NETWORK) && (nServices & NODE_NETWORK_LIMITED));

if (!pfrom.IsBlockOnlyConn()) {
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
peer->m_tx_relay->m_relay_txs = fRelay; // set to true after we get the first filter* message
{
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
peer->m_tx_relay->m_relay_txs = fRelay; // set to true after we get the first filter* message
}
if (fRelay) pfrom.m_relays_txs = true;
}

Expand Down Expand Up @@ -4687,10 +4689,12 @@ void PeerManagerImpl::ProcessMessage(
}
else if (!pfrom.IsBlockOnlyConn())
{
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
peer->m_tx_relay->m_bloom_filter.reset(new CBloomFilter(filter));
{
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
peer->m_tx_relay->m_bloom_filter.reset(new CBloomFilter(filter));
peer->m_tx_relay->m_relay_txs = true;
}
pfrom.m_bloom_filter_loaded = true;
peer->m_tx_relay->m_relay_txs = true;
pfrom.m_relays_txs = true;
}
return;
Expand Down Expand Up @@ -4733,10 +4737,13 @@ void PeerManagerImpl::ProcessMessage(
if (pfrom.IsBlockOnlyConn()) {
return;
}
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
peer->m_tx_relay->m_bloom_filter = nullptr;

{
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
peer->m_tx_relay->m_bloom_filter = nullptr;
peer->m_tx_relay->m_relay_txs = true;
}
pfrom.m_bloom_filter_loaded = false;
peer->m_tx_relay->m_relay_txs = true;
pfrom.m_relays_txs = true;
return;
}
Expand Down
7 changes: 5 additions & 2 deletions src/test/fuzz/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman,
const ServiceFlags remote_services = ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS);
const NetPermissionFlags permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
const int32_t version = fuzzed_data_provider.ConsumeIntegralInRange<int32_t>(MIN_PEER_PROTO_VERSION, std::numeric_limits<int32_t>::max());
const bool filter_txs = fuzzed_data_provider.ConsumeBool();
const bool relay_txs{fuzzed_data_provider.ConsumeBool()};

const CNetMsgMaker mm{0};

Expand All @@ -222,7 +222,7 @@ void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman,
uint64_t{1}, // dummy nonce
std::string{}, // dummy subver
int32_t{}, // dummy starting_height
filter_txs),
relay_txs),
};

(void)connman.ReceiveMsgFrom(node, msg_version);
Expand All @@ -236,6 +236,9 @@ void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman,
assert(node.nVersion == version);
assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION));
assert(node.nServices == remote_services);
CNodeStateStats statestats;
assert(peerman.GetNodeStateStats(node.GetId(), statestats));
assert(statestats.m_relay_txs == (relay_txs && !node.IsBlockOnlyConn()));
node.m_permissionFlags = permission_flags;
if (successfully_connected) {
CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)};
Expand Down

0 comments on commit c89799d

Please sign in to comment.