diff --git a/bitcoin/block.c b/bitcoin/block.c index 6838f2c39344..b911f6af1cfd 100644 --- a/bitcoin/block.c +++ b/bitcoin/block.c @@ -210,6 +210,8 @@ bitcoin_block_from_hex(const tal_t *ctx, const struct chainparams *chainparams, b->txids = tal_arr(b, struct bitcoin_txid, num); for (i = 0; i < num; i++) { b->tx[i] = pull_bitcoin_tx_only(b->tx, &p, &len); + if (!b->tx[i]) + return tal_free(b); b->tx[i]->chainparams = chainparams; bitcoin_txid(b->tx[i], &b->txids[i]); } diff --git a/bitcoin/test/run-bitcoin_block_from_hex.c b/bitcoin/test/run-bitcoin_block_from_hex.c index 94b26ad5d05f..3d68f975cc7f 100644 --- a/bitcoin/test/run-bitcoin_block_from_hex.c +++ b/bitcoin/test/run-bitcoin_block_from_hex.c @@ -103,6 +103,9 @@ int main(int argc, const char *argv[]) assert(bitcoin_txid_eq(&txid, &expected_txid)); tal_free(b); + for (size_t i = 1; i < strlen(block); i++) + assert(!bitcoin_block_from_hex(NULL, chainparams, block, i)); + common_shutdown(); return 0; }