mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-19 05:45:05 +01:00
Merge bitcoin/bitcoin#26007: [contrib] message-capture-parser: fix AssertionError on parsing headers
message
644772b9ef
message-capture-parser: fix AssertionError on parsing `headers` message (Sebastian Falbesoner) Pull request description: If a test framework message's field name is in the list of `HASH_INT_VECTORS`, we currently assume that it _always_ has to contain a vector of integers and throw otherwise:0ebd4db32b/contrib/message-capture/message-capture-parser.py (L82-L83)
(introduced in PR #25367, commit42bbbba7c8
). However, that assumption is too strict. The (de)serialization field name "headers" is used in two different message types, one for `cfcheckpt` (where it is serialized as an integer vector), and another time for `headers` (where it is serialized as a vector of `CBlockHeader`s). Parsing the latter fails as it is not an integer vector and thus triggers the assert. Fix this by adding the integer type check as additional condition to the `HASH_INT_VECTORS` check rather than asserting. Fixes #25954. ACKs for top commit: glozow: ACK644772b9ef
Tree-SHA512: c98a107f6703c6c1a81771907c25bcc171c631b57fd605fbebaedd93d651e2ef02fb5601853a9bc7d659ab531c5f47770181173a36ea2b37f584aa7a37b66505
This commit is contained in:
commit
3c5fb9691b
@ -79,8 +79,7 @@ def to_jsonable(obj: Any) -> Any:
|
||||
val = getattr(obj, slot, None)
|
||||
if slot in HASH_INTS and isinstance(val, int):
|
||||
ret[slot] = ser_uint256(val).hex()
|
||||
elif slot in HASH_INT_VECTORS:
|
||||
assert all(isinstance(a, int) for a in val)
|
||||
elif slot in HASH_INT_VECTORS and all(isinstance(a, int) for a in val):
|
||||
ret[slot] = [ser_uint256(a).hex() for a in val]
|
||||
else:
|
||||
ret[slot] = to_jsonable(val)
|
||||
|
Loading…
Reference in New Issue
Block a user