diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -3356,6 +3356,7 @@ HexStr(hash.begin(), hash.begin() + CMessageHeader::CHECKSUM_SIZE), HexStr(hdr.pchChecksum, hdr.pchChecksum + CMessageHeader::CHECKSUM_SIZE)); + Misbehaving(pfrom, 100, "msg-header-checksum-mismatch"); return fMoreWork; } diff --git a/test/functional/abc-invalid-message.py b/test/functional/abc-invalid-message.py new file mode 100755 --- /dev/null +++ b/test/functional/abc-invalid-message.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +# Copyright (c) 2019 The Bitcoin developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +"""ABC Invalid Message Test + +Test that invalid messages get rejected and/or ban the sender as expected for +each case. +""" + +import struct +from test_framework.mininode import ( + NetworkThread, + NodeConn, + NodeConnCB, + msg_ping, + mininode_lock, +) +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import p2p_port, wait_until + + +def msg_bad_checksum(connection, original_message): + message_data = bytearray(connection.format_message(original_message)) + + command = original_message.command + data = original_message.serialize() + i = 0 + i += len(connection.MAGIC_BYTES[connection.network]) + i += len(command) + i += len(b"\x00" * (12 - len(command))) + i += len(struct.pack("