diff options
author | Troy Giorshev <troygiorshev@gmail.com> | 2020-06-04 13:06:17 -0400 |
---|---|---|
committer | Troy Giorshev <troygiorshev@gmail.com> | 2020-06-08 00:55:34 -0400 |
commit | 5c4648d17ba18e4194959963994cc6b37053f127 (patch) | |
tree | 023fd4e638e8990352f8966de267ca7945532f44 /test/functional/p2p_invalid_messages.py | |
parent | ff1e7b884447a5ba10553b2d964625f94e255bdc (diff) |
Fix "invalid message size" test
This test originally made a message with an invalid stated length, and
an invalid checksum. This was because only the header was changed, but
the checksum stayed the same. This was fine for now because we check
the header first to see if it has a valid stated size, and we disconnect
if it does not, so we never end up checking for the checksum. If this
behavior was to change, this test would become a problem. (Indeed I
discovered this when playing around with this behavior). By instead
creating a message with an oversized payload from the start, we create a
message with an invalid stated length but a valid checksum, as intended.
Additionally, this takes advantage to the newly module-global
VALID_DATA_LIMIT as opposed to the magic 0x02000000. Yes, 4MB < 32MiB,
but at the moment when receiving a message we check both, so this makes
the test tighter.
Diffstat (limited to 'test/functional/p2p_invalid_messages.py')
-rwxr-xr-x | test/functional/p2p_invalid_messages.py | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/test/functional/p2p_invalid_messages.py b/test/functional/p2p_invalid_messages.py index 38e823df47..b15d2ffd2e 100755 --- a/test/functional/p2p_invalid_messages.py +++ b/test/functional/p2p_invalid_messages.py @@ -4,7 +4,6 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. """Test node responses to invalid network messages.""" import asyncio -import struct from test_framework.messages import ( CBlockHeader, @@ -123,13 +122,9 @@ class InvalidMessagesTest(BitcoinTestFramework): def test_size(self): conn = self.nodes[0].add_p2p_connection(P2PDataStore()) with self.nodes[0].assert_debug_log(['']): - msg = conn.build_message(msg_unrecognized(str_data="d")) - cut_len = ( - 4 + # magic - 12 # msgtype - ) - # modify len to MAX_SIZE + 1 - msg = msg[:cut_len] + struct.pack("<I", 0x02000000 + 1) + msg[cut_len + 4:] + # Create a message with oversized payload + msg = msg_unrecognized(str_data="d"*(VALID_DATA_LIMIT + 1)) + msg = conn.build_message(msg) self.nodes[0].p2p.send_raw_message(msg) conn.wait_for_disconnect(timeout=1) self.nodes[0].disconnect_p2ps() |