|
3 | 3 | // file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
4 | 4 |
|
5 | 5 | #include <consensus/amount.h>
|
| 6 | +#include <net_processing.h> |
| 7 | +#include <netmessagemaker.h> |
6 | 8 | #include <pubkey.h>
|
7 | 9 | #include <test/fuzz/util.h>
|
8 | 10 | #include <test/util/script.h>
|
@@ -203,22 +205,54 @@ bool FuzzedSock::IsConnected(std::string& errmsg) const
|
203 | 205 | void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, PeerManager& peerman, CNode& node) noexcept
|
204 | 206 | {
|
205 | 207 | const bool successfully_connected{fuzzed_data_provider.ConsumeBool()};
|
206 |
| - node.fSuccessfullyConnected = successfully_connected; |
207 | 208 | const ServiceFlags remote_services = ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS);
|
208 | 209 | const NetPermissionFlags permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
|
209 | 210 | const int32_t version = fuzzed_data_provider.ConsumeIntegralInRange<int32_t>(MIN_PEER_PROTO_VERSION, std::numeric_limits<int32_t>::max());
|
210 | 211 | const bool filter_txs = fuzzed_data_provider.ConsumeBool();
|
211 | 212 |
|
| 213 | + const CNetMsgMaker mm{0}; |
| 214 | + |
| 215 | + CSerializedNetMsg msg_version{ |
| 216 | + mm.Make(NetMsgType::VERSION, |
| 217 | + version, // |
| 218 | + Using<CustomUintFormatter<8>>(remote_services), // |
| 219 | + int64_t{}, // dummy time |
| 220 | + int64_t{}, // ignored service bits |
| 221 | + CService{}, // dummy |
| 222 | + int64_t{}, // ignored service bits |
| 223 | + CService{}, // ignored |
| 224 | + uint64_t{1}, // dummy nonce |
| 225 | + std::string{}, // dummy subver |
| 226 | + int32_t{}, // dummy starting_height |
| 227 | + filter_txs), |
| 228 | + }; |
| 229 | + |
| 230 | + (void)connman.ReceiveMsgFrom(node, msg_version); |
212 | 231 | node.fPauseSend = false;
|
213 |
| - node.nServices = remote_services; |
214 |
| - node.m_permissionFlags = permission_flags; |
215 |
| - if (successfully_connected) { |
216 |
| - node.nVersion = version; |
217 |
| - node.SetCommonVersion(std::min(version, PROTOCOL_VERSION)); |
| 232 | + connman.ProcessMessagesOnce(node); |
| 233 | + { |
| 234 | + LOCK(node.cs_sendProcessing); |
| 235 | + peerman.SendMessages(&node); |
218 | 236 | }
|
| 237 | + if (node.fDisconnect) return; |
| 238 | + assert(node.nVersion == version); |
| 239 | + assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION)); |
| 240 | + assert(node.nServices == remote_services); |
219 | 241 | if (node.m_tx_relay != nullptr) {
|
220 | 242 | LOCK(node.m_tx_relay->cs_filter);
|
221 |
| - node.m_tx_relay->fRelayTxes = filter_txs; |
| 243 | + assert(node.m_tx_relay->fRelayTxes == filter_txs); |
| 244 | + } |
| 245 | + node.m_permissionFlags = permission_flags; |
| 246 | + if (successfully_connected) { |
| 247 | + CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)}; |
| 248 | + (void)connman.ReceiveMsgFrom(node, msg_verack); |
| 249 | + node.fPauseSend = false; |
| 250 | + connman.ProcessMessagesOnce(node); |
| 251 | + { |
| 252 | + LOCK(node.cs_sendProcessing); |
| 253 | + peerman.SendMessages(&node); |
| 254 | + } |
| 255 | + assert(node.fSuccessfullyConnected == true); |
222 | 256 | }
|
223 | 257 | }
|
224 | 258 |
|
|
0 commit comments