From b4ead975175a35731fa09346aeab4a20d0c27227 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Thu, 17 Jun 2021 12:54:45 +0200 Subject: [PATCH] tlv: Allow passing some extra types to accept when parsing the stream --- channeld/channeld_wiregen.c | 2 +- channeld/channeld_wiregen.h | 2 +- closingd/closingd_wiregen.c | 2 +- closingd/closingd_wiregen.h | 2 +- common/peer_status_wiregen.c | 2 +- common/peer_status_wiregen.h | 2 +- common/status_wiregen.c | 2 +- common/status_wiregen.h | 2 +- common/test/run-gossmap_local.c | 3 ++- common/test/run-json.c | 3 ++- common/test/run-param.c | 3 ++- common/test/run-route-specific.c | 3 ++- common/test/run-route.c | 3 ++- common/test/run-sphinx.c | 3 ++- connectd/connectd_gossipd_wiregen.c | 2 +- connectd/connectd_gossipd_wiregen.h | 2 +- connectd/connectd_wiregen.c | 2 +- connectd/connectd_wiregen.h | 2 +- gossipd/gossip_store_wiregen.c | 2 +- gossipd/gossip_store_wiregen.h | 2 +- gossipd/gossipd_peerd_wiregen.c | 2 +- gossipd/gossipd_peerd_wiregen.h | 2 +- gossipd/gossipd_wiregen.c | 2 +- gossipd/gossipd_wiregen.h | 2 +- hsmd/hsmd_wiregen.c | 2 +- hsmd/hsmd_wiregen.h | 2 +- onchaind/onchaind_wiregen.c | 2 +- onchaind/onchaind_wiregen.h | 2 +- openingd/dualopend_wiregen.c | 2 +- openingd/dualopend_wiregen.h | 2 +- openingd/openingd_wiregen.c | 2 +- openingd/openingd_wiregen.h | 2 +- tools/gen/impl_template | 2 +- wire/bolt12_wiregen.c | 10 +++++----- wire/bolt12_wiregen.h | 2 +- wire/common_wiregen.c | 2 +- wire/common_wiregen.h | 2 +- wire/onion_printgen.c | 2 +- wire/onion_printgen.h | 2 +- wire/onion_wiregen.c | 8 ++++---- wire/onion_wiregen.h | 2 +- wire/peer_printgen.c | 2 +- wire/peer_printgen.h | 2 +- wire/peer_wiregen.c | 26 +++++++++++++------------- wire/peer_wiregen.h | 2 +- wire/tlvstream.c | 21 +++++++++++++++++++-- wire/tlvstream.h | 5 ++--- 47 files changed, 91 insertions(+), 69 deletions(-) diff --git a/channeld/channeld_wiregen.c b/channeld/channeld_wiregen.c index 44ef1f31b..be5e88e33 100644 --- a/channeld/channeld_wiregen.c +++ b/channeld/channeld_wiregen.c @@ -1145,4 +1145,4 @@ bool fromwire_channeld_upgraded(const void *p, bool *option_static_remotekey) *option_static_remotekey = fromwire_bool(&cursor, &plen); return cursor != NULL; } -// SHA256STAMP:d67a5e23adc6362c93c60fcf3e4a46ccb1804dff1f10ec9a8d361ba9c548bb12 +// SHA256STAMP:7fe345eb02876c231759ec37daba697e85ac3a43137e4b7cb67d136587e2bda5 diff --git a/channeld/channeld_wiregen.h b/channeld/channeld_wiregen.h index c41ea9353..6854874b8 100644 --- a/channeld/channeld_wiregen.h +++ b/channeld/channeld_wiregen.h @@ -232,4 +232,4 @@ bool fromwire_channeld_upgraded(const void *p, bool *option_static_remotekey); #endif /* LIGHTNING_CHANNELD_CHANNELD_WIREGEN_H */ -// SHA256STAMP:d67a5e23adc6362c93c60fcf3e4a46ccb1804dff1f10ec9a8d361ba9c548bb12 +// SHA256STAMP:7fe345eb02876c231759ec37daba697e85ac3a43137e4b7cb67d136587e2bda5 diff --git a/closingd/closingd_wiregen.c b/closingd/closingd_wiregen.c index ca64732c0..bb7d9d776 100644 --- a/closingd/closingd_wiregen.c +++ b/closingd/closingd_wiregen.c @@ -195,4 +195,4 @@ bool fromwire_closingd_complete(const void *p) return false; return cursor != NULL; } -// SHA256STAMP:b08cf96b79e7a72bb574d0549148dd521d77834454a528fb13ee5b83d4942573 +// SHA256STAMP:cbcaa37f43a9705e657ef6905e276ac4b703171a3f9dcd6f6ca352e3d753a6f2 diff --git a/closingd/closingd_wiregen.h b/closingd/closingd_wiregen.h index 9d1eeb404..d39505198 100644 --- a/closingd/closingd_wiregen.h +++ b/closingd/closingd_wiregen.h @@ -56,4 +56,4 @@ bool fromwire_closingd_complete(const void *p); #endif /* LIGHTNING_CLOSINGD_CLOSINGD_WIREGEN_H */ -// SHA256STAMP:b08cf96b79e7a72bb574d0549148dd521d77834454a528fb13ee5b83d4942573 +// SHA256STAMP:cbcaa37f43a9705e657ef6905e276ac4b703171a3f9dcd6f6ca352e3d753a6f2 diff --git a/common/peer_status_wiregen.c b/common/peer_status_wiregen.c index 0f12fa92a..3ffd2af45 100644 --- a/common/peer_status_wiregen.c +++ b/common/peer_status_wiregen.c @@ -80,4 +80,4 @@ bool fromwire_status_peer_error(const tal_t *ctx, const void *p, struct channel_ fromwire_u8_array(&cursor, &plen, *error_for_them, len); return cursor != NULL; } -// SHA256STAMP:9d6739d97294bd0ec0691772616c4d3d0328d399ed2bef6c943f912aca7d438a +// SHA256STAMP:9eae5e1735b52e459db2548ff73399a8cb503ddbf72defc5bfa4022f3682ffd5 diff --git a/common/peer_status_wiregen.h b/common/peer_status_wiregen.h index 52d7941ae..a1bc77494 100644 --- a/common/peer_status_wiregen.h +++ b/common/peer_status_wiregen.h @@ -34,4 +34,4 @@ bool fromwire_status_peer_error(const tal_t *ctx, const void *p, struct channel_ #endif /* LIGHTNING_COMMON_PEER_STATUS_WIREGEN_H */ -// SHA256STAMP:9d6739d97294bd0ec0691772616c4d3d0328d399ed2bef6c943f912aca7d438a +// SHA256STAMP:9eae5e1735b52e459db2548ff73399a8cb503ddbf72defc5bfa4022f3682ffd5 diff --git a/common/status_wiregen.c b/common/status_wiregen.c index d97b9ee0f..dce8d303a 100644 --- a/common/status_wiregen.c +++ b/common/status_wiregen.c @@ -214,4 +214,4 @@ bool fromwire_status_version(const tal_t *ctx, const void *p, wirestring **versi *version = fromwire_wirestring(ctx, &cursor, &plen); return cursor != NULL; } -// SHA256STAMP:3164c82c28124ba916aebd075baa2315cd82cee0d785908da25c6aa6c5b11f22 +// SHA256STAMP:676725f967cd09851ed0d872ed58ed058fa9de7d95acca7169e0262e7d0b2c64 diff --git a/common/status_wiregen.h b/common/status_wiregen.h index 9a45697e0..81c2a6ee7 100644 --- a/common/status_wiregen.h +++ b/common/status_wiregen.h @@ -58,4 +58,4 @@ bool fromwire_status_version(const tal_t *ctx, const void *p, wirestring **versi #endif /* LIGHTNING_COMMON_STATUS_WIREGEN_H */ -// SHA256STAMP:3164c82c28124ba916aebd075baa2315cd82cee0d785908da25c6aa6c5b11f22 +// SHA256STAMP:676725f967cd09851ed0d872ed58ed058fa9de7d95acca7169e0262e7d0b2c64 diff --git a/common/test/run-gossmap_local.c b/common/test/run-gossmap_local.c index 2e23651df..4973f9de7 100644 --- a/common/test/run-gossmap_local.c +++ b/common/test/run-gossmap_local.c @@ -24,7 +24,8 @@ bool fromwire_tlv(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, void *record UNNEEDED, struct tlv_field **fields UNNEEDED) { fprintf(stderr, "fromwire_tlv called!\n"); abort(); } /* Generated stub for tlv_fields_valid */ -bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, size_t *err_index UNNEEDED) +bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, u64 *allow_extra UNNEEDED, + size_t *err_index UNNEEDED) { fprintf(stderr, "tlv_fields_valid called!\n"); abort(); } /* Generated stub for towire_bigsize */ void towire_bigsize(u8 **pptr UNNEEDED, const bigsize_t val UNNEEDED) diff --git a/common/test/run-json.c b/common/test/run-json.c index 599808f08..e2ca8871d 100644 --- a/common/test/run-json.c +++ b/common/test/run-json.c @@ -19,7 +19,8 @@ bool fromwire_tlv(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, bool node_id_from_hexstr(const char *str UNNEEDED, size_t slen UNNEEDED, struct node_id *id UNNEEDED) { fprintf(stderr, "node_id_from_hexstr called!\n"); abort(); } /* Generated stub for tlv_fields_valid */ -bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, size_t *err_index UNNEEDED) +bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, u64 *allow_extra UNNEEDED, + size_t *err_index UNNEEDED) { fprintf(stderr, "tlv_fields_valid called!\n"); abort(); } /* Generated stub for towire_tlv */ void towire_tlv(u8 **pptr UNNEEDED, diff --git a/common/test/run-param.c b/common/test/run-param.c index 0ccbeff25..b644397c1 100644 --- a/common/test/run-param.c +++ b/common/test/run-param.c @@ -79,7 +79,8 @@ int segwit_addr_decode( ) { fprintf(stderr, "segwit_addr_decode called!\n"); abort(); } /* Generated stub for tlv_fields_valid */ -bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, size_t *err_index UNNEEDED) +bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, u64 *allow_extra UNNEEDED, + size_t *err_index UNNEEDED) { fprintf(stderr, "tlv_fields_valid called!\n"); abort(); } /* Generated stub for towire_tlv */ void towire_tlv(u8 **pptr UNNEEDED, diff --git a/common/test/run-route-specific.c b/common/test/run-route-specific.c index 5f77965b8..3690ce5ba 100644 --- a/common/test/run-route-specific.c +++ b/common/test/run-route-specific.c @@ -30,7 +30,8 @@ bool fromwire_tlv(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, void *record UNNEEDED, struct tlv_field **fields UNNEEDED) { fprintf(stderr, "fromwire_tlv called!\n"); abort(); } /* Generated stub for tlv_fields_valid */ -bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, size_t *err_index UNNEEDED) +bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, u64 *allow_extra UNNEEDED, + size_t *err_index UNNEEDED) { fprintf(stderr, "tlv_fields_valid called!\n"); abort(); } /* Generated stub for towire_bigsize */ void towire_bigsize(u8 **pptr UNNEEDED, const bigsize_t val UNNEEDED) diff --git a/common/test/run-route.c b/common/test/run-route.c index 5b6f47aa9..0c50b798e 100644 --- a/common/test/run-route.c +++ b/common/test/run-route.c @@ -23,7 +23,8 @@ bool fromwire_tlv(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, void *record UNNEEDED, struct tlv_field **fields UNNEEDED) { fprintf(stderr, "fromwire_tlv called!\n"); abort(); } /* Generated stub for tlv_fields_valid */ -bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, size_t *err_index UNNEEDED) +bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, u64 *allow_extra UNNEEDED, + size_t *err_index UNNEEDED) { fprintf(stderr, "tlv_fields_valid called!\n"); abort(); } /* Generated stub for towire_bigsize */ void towire_bigsize(u8 **pptr UNNEEDED, const bigsize_t val UNNEEDED) diff --git a/common/test/run-sphinx.c b/common/test/run-sphinx.c index ce64936a2..6c625000a 100644 --- a/common/test/run-sphinx.c +++ b/common/test/run-sphinx.c @@ -74,7 +74,8 @@ bool fromwire_tlv(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, bool pubkey_from_node_id(struct pubkey *key UNNEEDED, const struct node_id *id UNNEEDED) { fprintf(stderr, "pubkey_from_node_id called!\n"); abort(); } /* Generated stub for tlv_fields_valid */ -bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, size_t *err_index UNNEEDED) +bool tlv_fields_valid(const struct tlv_field *fields UNNEEDED, u64 *allow_extra UNNEEDED, + size_t *err_index UNNEEDED) { fprintf(stderr, "tlv_fields_valid called!\n"); abort(); } /* Generated stub for towire_amount_msat */ void towire_amount_msat(u8 **pptr UNNEEDED, const struct amount_msat msat UNNEEDED) diff --git a/connectd/connectd_gossipd_wiregen.c b/connectd/connectd_gossipd_wiregen.c index ac2856c3a..f25aa2b08 100644 --- a/connectd/connectd_gossipd_wiregen.c +++ b/connectd/connectd_gossipd_wiregen.c @@ -161,4 +161,4 @@ bool fromwire_gossipd_get_addrs_reply(const tal_t *ctx, const void *p, struct wi fromwire_wireaddr(&cursor, &plen, *addrs + i); return cursor != NULL; } -// SHA256STAMP:6bfe0677cb910aba63f79cfc4164ce26034da95e16341eab3aac6fddcc04e3e9 +// SHA256STAMP:5565fac68fbf90e24ef5f8230483b52952d342080d44ce9fb8ae0e9843ad1529 diff --git a/connectd/connectd_gossipd_wiregen.h b/connectd/connectd_gossipd_wiregen.h index 5c391775a..81f127815 100644 --- a/connectd/connectd_gossipd_wiregen.h +++ b/connectd/connectd_gossipd_wiregen.h @@ -54,4 +54,4 @@ bool fromwire_gossipd_get_addrs_reply(const tal_t *ctx, const void *p, struct wi #endif /* LIGHTNING_CONNECTD_CONNECTD_GOSSIPD_WIREGEN_H */ -// SHA256STAMP:6bfe0677cb910aba63f79cfc4164ce26034da95e16341eab3aac6fddcc04e3e9 +// SHA256STAMP:5565fac68fbf90e24ef5f8230483b52952d342080d44ce9fb8ae0e9843ad1529 diff --git a/connectd/connectd_wiregen.c b/connectd/connectd_wiregen.c index 3ee9ea506..122ad6021 100644 --- a/connectd/connectd_wiregen.c +++ b/connectd/connectd_wiregen.c @@ -443,4 +443,4 @@ bool fromwire_connectd_dev_memleak_reply(const void *p, bool *leak) *leak = fromwire_bool(&cursor, &plen); return cursor != NULL; } -// SHA256STAMP:042c0ae692c223da86af3f09977fdc5f19655e99b928ab05812dd4c1ed95f1c5 +// SHA256STAMP:533fec0547d283247c2fbd2ef52c7df86614f5152c8f3282e0e1e699de3af5d4 diff --git a/connectd/connectd_wiregen.h b/connectd/connectd_wiregen.h index 34ad8ca34..42acf72a8 100644 --- a/connectd/connectd_wiregen.h +++ b/connectd/connectd_wiregen.h @@ -110,4 +110,4 @@ bool fromwire_connectd_dev_memleak_reply(const void *p, bool *leak); #endif /* LIGHTNING_CONNECTD_CONNECTD_WIREGEN_H */ -// SHA256STAMP:042c0ae692c223da86af3f09977fdc5f19655e99b928ab05812dd4c1ed95f1c5 +// SHA256STAMP:533fec0547d283247c2fbd2ef52c7df86614f5152c8f3282e0e1e699de3af5d4 diff --git a/gossipd/gossip_store_wiregen.c b/gossipd/gossip_store_wiregen.c index 90cbd0b07..918cecbdc 100644 --- a/gossipd/gossip_store_wiregen.c +++ b/gossipd/gossip_store_wiregen.c @@ -210,4 +210,4 @@ bool fromwire_gossipd_local_add_channel_obs(const tal_t *ctx, const void *p, str fromwire_u8_array(&cursor, &plen, *features, flen); return cursor != NULL; } -// SHA256STAMP:3e6e23b99855a3be9305cbc297d59d818cc193d6ebe5c2ca78dfb6ec5df31e94 +// SHA256STAMP:f5b4fcddb25b45895865636a90b9a5e0f9d2acfba04f4e9ecc14d2dfcad1e01a diff --git a/gossipd/gossip_store_wiregen.h b/gossipd/gossip_store_wiregen.h index 0941d51e6..a7c4b3a11 100644 --- a/gossipd/gossip_store_wiregen.h +++ b/gossipd/gossip_store_wiregen.h @@ -63,4 +63,4 @@ bool fromwire_gossipd_local_add_channel_obs(const tal_t *ctx, const void *p, str #endif /* LIGHTNING_GOSSIPD_GOSSIP_STORE_WIREGEN_H */ -// SHA256STAMP:3e6e23b99855a3be9305cbc297d59d818cc193d6ebe5c2ca78dfb6ec5df31e94 +// SHA256STAMP:f5b4fcddb25b45895865636a90b9a5e0f9d2acfba04f4e9ecc14d2dfcad1e01a diff --git a/gossipd/gossipd_peerd_wiregen.c b/gossipd/gossipd_peerd_wiregen.c index a6ff50636..caffb94f9 100644 --- a/gossipd/gossipd_peerd_wiregen.c +++ b/gossipd/gossipd_peerd_wiregen.c @@ -161,4 +161,4 @@ bool fromwire_gossipd_local_channel_announcement(const tal_t *ctx, const void *p fromwire_u8_array(&cursor, &plen, *cannount, len); return cursor != NULL; } -// SHA256STAMP:e55284452718ed1baf12a38736b4bfeecc8bb18dac8ad4f0ee0b5dc8904fbdc2 +// SHA256STAMP:bf705b59df34f8e21f337759dfd6d56e610be91c1838a1eef25c807d5b2e7184 diff --git a/gossipd/gossipd_peerd_wiregen.h b/gossipd/gossipd_peerd_wiregen.h index 8240e6616..5274f1ee2 100644 --- a/gossipd/gossipd_peerd_wiregen.h +++ b/gossipd/gossipd_peerd_wiregen.h @@ -57,4 +57,4 @@ bool fromwire_gossipd_local_channel_announcement(const tal_t *ctx, const void *p #endif /* LIGHTNING_GOSSIPD_GOSSIPD_PEERD_WIREGEN_H */ -// SHA256STAMP:e55284452718ed1baf12a38736b4bfeecc8bb18dac8ad4f0ee0b5dc8904fbdc2 +// SHA256STAMP:bf705b59df34f8e21f337759dfd6d56e610be91c1838a1eef25c807d5b2e7184 diff --git a/gossipd/gossipd_wiregen.c b/gossipd/gossipd_wiregen.c index b5f6a2b32..c54ac4b88 100644 --- a/gossipd/gossipd_wiregen.c +++ b/gossipd/gossipd_wiregen.c @@ -753,4 +753,4 @@ bool fromwire_gossipd_addgossip_reply(const tal_t *ctx, const void *p, wirestrin *err = fromwire_wirestring(ctx, &cursor, &plen); return cursor != NULL; } -// SHA256STAMP:6f6810a7e9c5e3e7dc1dd716b6a8de019516f6e82e3664bdf760647b5a987883 +// SHA256STAMP:9b38d439d81bbd471c821163b275c5cf3106a665dbdea563113742476f18e386 diff --git a/gossipd/gossipd_wiregen.h b/gossipd/gossipd_wiregen.h index 5e2c5f4a3..c393c1448 100644 --- a/gossipd/gossipd_wiregen.h +++ b/gossipd/gossipd_wiregen.h @@ -180,4 +180,4 @@ bool fromwire_gossipd_addgossip_reply(const tal_t *ctx, const void *p, wirestrin #endif /* LIGHTNING_GOSSIPD_GOSSIPD_WIREGEN_H */ -// SHA256STAMP:6f6810a7e9c5e3e7dc1dd716b6a8de019516f6e82e3664bdf760647b5a987883 +// SHA256STAMP:9b38d439d81bbd471c821163b275c5cf3106a665dbdea563113742476f18e386 diff --git a/hsmd/hsmd_wiregen.c b/hsmd/hsmd_wiregen.c index 048a49a28..57ef6734a 100644 --- a/hsmd/hsmd_wiregen.c +++ b/hsmd/hsmd_wiregen.c @@ -1278,4 +1278,4 @@ bool fromwire_hsmd_sign_bolt12_reply(const void *p, struct bip340sig *sig) fromwire_bip340sig(&cursor, &plen, sig); return cursor != NULL; } -// SHA256STAMP:535c69a065c06a2e2ea151154ae83b53283d1c5b34e18b43a2c12c9444472548 +// SHA256STAMP:d802e57862a2ced1580824c7419e6c1075864496478c7ca6c47456df279d88df diff --git a/hsmd/hsmd_wiregen.h b/hsmd/hsmd_wiregen.h index 1da52edbc..1e64236ce 100644 --- a/hsmd/hsmd_wiregen.h +++ b/hsmd/hsmd_wiregen.h @@ -283,4 +283,4 @@ bool fromwire_hsmd_sign_bolt12_reply(const void *p, struct bip340sig *sig); #endif /* LIGHTNING_HSMD_HSMD_WIREGEN_H */ -// SHA256STAMP:535c69a065c06a2e2ea151154ae83b53283d1c5b34e18b43a2c12c9444472548 +// SHA256STAMP:d802e57862a2ced1580824c7419e6c1075864496478c7ca6c47456df279d88df diff --git a/onchaind/onchaind_wiregen.c b/onchaind/onchaind_wiregen.c index 381c0376c..a42f776e8 100644 --- a/onchaind/onchaind_wiregen.c +++ b/onchaind/onchaind_wiregen.c @@ -637,4 +637,4 @@ bool fromwire_onchaind_notify_coin_mvt(const void *p, struct chain_coin_mvt *mvt fromwire_chain_coin_mvt(&cursor, &plen, mvt); return cursor != NULL; } -// SHA256STAMP:66e19538be7f5a9e9076bfe995a9bf0cbb5d303df8f6c383e427c11ef2e85e2e +// SHA256STAMP:746e39c14fccea8ff63ee097aa2b742ff0cdb63bd6dfaecd02b8b1c9fab58376 diff --git a/onchaind/onchaind_wiregen.h b/onchaind/onchaind_wiregen.h index 48692bae7..7b6cc5751 100644 --- a/onchaind/onchaind_wiregen.h +++ b/onchaind/onchaind_wiregen.h @@ -161,4 +161,4 @@ bool fromwire_onchaind_notify_coin_mvt(const void *p, struct chain_coin_mvt *mvt #endif /* LIGHTNING_ONCHAIND_ONCHAIND_WIREGEN_H */ -// SHA256STAMP:66e19538be7f5a9e9076bfe995a9bf0cbb5d303df8f6c383e427c11ef2e85e2e +// SHA256STAMP:746e39c14fccea8ff63ee097aa2b742ff0cdb63bd6dfaecd02b8b1c9fab58376 diff --git a/openingd/dualopend_wiregen.c b/openingd/dualopend_wiregen.c index 21d658ecb..b6e6a6364 100644 --- a/openingd/dualopend_wiregen.c +++ b/openingd/dualopend_wiregen.c @@ -912,4 +912,4 @@ bool fromwire_dualopend_dev_memleak_reply(const void *p, bool *leak) *leak = fromwire_bool(&cursor, &plen); return cursor != NULL; } -// SHA256STAMP:0a1ed6e8461512630be3bb328083495d5c5f682c59dfb24561024ba8fa0d3b70 +// SHA256STAMP:a4678b6938e46bd8ab7c6076312789d0cdfa06076d745fd28fd65f3febc4c3a0 diff --git a/openingd/dualopend_wiregen.h b/openingd/dualopend_wiregen.h index de36baf2f..c190a7398 100644 --- a/openingd/dualopend_wiregen.h +++ b/openingd/dualopend_wiregen.h @@ -216,4 +216,4 @@ bool fromwire_dualopend_dev_memleak_reply(const void *p, bool *leak); #endif /* LIGHTNING_OPENINGD_DUALOPEND_WIREGEN_H */ -// SHA256STAMP:0a1ed6e8461512630be3bb328083495d5c5f682c59dfb24561024ba8fa0d3b70 +// SHA256STAMP:a4678b6938e46bd8ab7c6076312789d0cdfa06076d745fd28fd65f3febc4c3a0 diff --git a/openingd/openingd_wiregen.c b/openingd/openingd_wiregen.c index 76bc14a30..993782631 100644 --- a/openingd/openingd_wiregen.c +++ b/openingd/openingd_wiregen.c @@ -604,4 +604,4 @@ bool fromwire_openingd_dev_memleak_reply(const void *p, bool *leak) *leak = fromwire_bool(&cursor, &plen); return cursor != NULL; } -// SHA256STAMP:005577de0219577522210df32b3ed325f028b24fc25d3b77a1dc770077381b6b +// SHA256STAMP:3dc596105e65c16cc549a7ae739c7e83ed11cce7d7effb206f317522ba741506 diff --git a/openingd/openingd_wiregen.h b/openingd/openingd_wiregen.h index 1eaa101bb..949010fdf 100644 --- a/openingd/openingd_wiregen.h +++ b/openingd/openingd_wiregen.h @@ -128,4 +128,4 @@ bool fromwire_openingd_dev_memleak_reply(const void *p, bool *leak); #endif /* LIGHTNING_OPENINGD_OPENINGD_WIREGEN_H */ -// SHA256STAMP:005577de0219577522210df32b3ed325f028b24fc25d3b77a1dc770077381b6b +// SHA256STAMP:3dc596105e65c16cc549a7ae739c7e83ed11cce7d7effb206f317522ba741506 diff --git a/tools/gen/impl_template b/tools/gen/impl_template index 8df0bb035..ad4b62e5c 100644 --- a/tools/gen/impl_template +++ b/tools/gen/impl_template @@ -270,7 +270,7 @@ bool fromwire_${tlv.name}(const u8 **cursor, size_t *max, struct ${tlv.struct_na bool ${tlv.name}_is_valid(const struct ${tlv.struct_name()} *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } % endfor ## END TLV's diff --git a/wire/bolt12_wiregen.c b/wire/bolt12_wiregen.c index c6cbee0a9..22e856078 100644 --- a/wire/bolt12_wiregen.c +++ b/wire/bolt12_wiregen.c @@ -564,7 +564,7 @@ bool fromwire_offer(const u8 **cursor, size_t *max, struct tlv_offer *record) bool offer_is_valid(const struct tlv_offer *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -837,7 +837,7 @@ bool fromwire_invoice_request(const u8 **cursor, size_t *max, struct tlv_invoice bool invoice_request_is_valid(const struct tlv_invoice_request *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -1458,7 +1458,7 @@ bool fromwire_invoice(const u8 **cursor, size_t *max, struct tlv_invoice *record bool invoice_is_valid(const struct tlv_invoice *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -1559,7 +1559,7 @@ bool fromwire_invoice_error(const u8 **cursor, size_t *max, struct tlv_invoice_e bool invoice_error_is_valid(const struct tlv_invoice_error *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } -// SHA256STAMP:73fe08a636a01319cb6996244159998c63cf6bc93a01e1f6562fbb27ff58d0cb +// SHA256STAMP:fecda3c161101b67c3bb235f3fed55e215cc1dc74ac34140925999dae22064ab diff --git a/wire/bolt12_wiregen.h b/wire/bolt12_wiregen.h index c86d6fcd7..364f2d783 100644 --- a/wire/bolt12_wiregen.h +++ b/wire/bolt12_wiregen.h @@ -316,4 +316,4 @@ struct fallback_address *fromwire_fallback_address(const tal_t *ctx, const u8 ** #endif /* LIGHTNING_WIRE_BOLT12_WIREGEN_H */ -// SHA256STAMP:73fe08a636a01319cb6996244159998c63cf6bc93a01e1f6562fbb27ff58d0cb +// SHA256STAMP:fecda3c161101b67c3bb235f3fed55e215cc1dc74ac34140925999dae22064ab diff --git a/wire/common_wiregen.c b/wire/common_wiregen.c index 3cd1ae5f2..54bb509f9 100644 --- a/wire/common_wiregen.c +++ b/wire/common_wiregen.c @@ -100,4 +100,4 @@ bool fromwire_custommsg_out(const tal_t *ctx, const void *p, u8 **msg) fromwire_u8_array(&cursor, &plen, *msg, msg_len); return cursor != NULL; } -// SHA256STAMP:195e43668e6a1d3cc539759de8706f07824d31d8cdac50cd7d46978b1541c479 +// SHA256STAMP:7408471edc4019dfa1eedc9eef712cc85bb140a2ff2ac40b45600679141b6f29 diff --git a/wire/common_wiregen.h b/wire/common_wiregen.h index 262d4ab12..3e154c107 100644 --- a/wire/common_wiregen.h +++ b/wire/common_wiregen.h @@ -41,4 +41,4 @@ bool fromwire_custommsg_out(const tal_t *ctx, const void *p, u8 **msg); #endif /* LIGHTNING_WIRE_COMMON_WIREGEN_H */ -// SHA256STAMP:195e43668e6a1d3cc539759de8706f07824d31d8cdac50cd7d46978b1541c479 +// SHA256STAMP:7408471edc4019dfa1eedc9eef712cc85bb140a2ff2ac40b45600679141b6f29 diff --git a/wire/onion_printgen.c b/wire/onion_printgen.c index 345d90dca..7ecdf5d63 100644 --- a/wire/onion_printgen.c +++ b/wire/onion_printgen.c @@ -859,4 +859,4 @@ void printonion_wire_tlv_message(const char *tlv_name, const u8 *msg) { printwire_tlvs(tlv_name, &msg, &plen, print_tlvs_encmsg_tlvs, ARRAY_SIZE(print_tlvs_encmsg_tlvs)); } } -// SHA256STAMP:71be5e63440a00cd787385b25d9d802d14c6e8c71a7003a260fa6b21f5ecea23 +// SHA256STAMP:b64074e7469fc3eb617387ecd9381141df9f2fab9200406e73c2120b8e8311a2 diff --git a/wire/onion_printgen.h b/wire/onion_printgen.h index 487bf2b3e..b84f3f8ed 100644 --- a/wire/onion_printgen.h +++ b/wire/onion_printgen.h @@ -58,4 +58,4 @@ void printwire_mpp_timeout(const char *fieldname, const u8 *cursor); void printwire_onionmsg_path(const char *fieldname, const u8 **cursor, size_t *plen); #endif /* LIGHTNING_WIRE_ONION_PRINTGEN_H */ -// SHA256STAMP:71be5e63440a00cd787385b25d9d802d14c6e8c71a7003a260fa6b21f5ecea23 +// SHA256STAMP:b64074e7469fc3eb617387ecd9381141df9f2fab9200406e73c2120b8e8311a2 diff --git a/wire/onion_wiregen.c b/wire/onion_wiregen.c index d47e94738..6957fac73 100644 --- a/wire/onion_wiregen.c +++ b/wire/onion_wiregen.c @@ -230,7 +230,7 @@ bool fromwire_tlv_payload(const u8 **cursor, size_t *max, struct tlv_tlv_payload bool tlv_payload_is_valid(const struct tlv_tlv_payload *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -457,7 +457,7 @@ bool fromwire_onionmsg_payload(const u8 **cursor, size_t *max, struct tlv_onionm bool onionmsg_payload_is_valid(const struct tlv_onionmsg_payload *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -536,7 +536,7 @@ bool fromwire_encmsg_tlvs(const u8 **cursor, size_t *max, struct tlv_encmsg_tlvs bool encmsg_tlvs_is_valid(const struct tlv_encmsg_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -1026,4 +1026,4 @@ bool fromwire_mpp_timeout(const void *p) return false; return cursor != NULL; } -// SHA256STAMP:71be5e63440a00cd787385b25d9d802d14c6e8c71a7003a260fa6b21f5ecea23 +// SHA256STAMP:b64074e7469fc3eb617387ecd9381141df9f2fab9200406e73c2120b8e8311a2 diff --git a/wire/onion_wiregen.h b/wire/onion_wiregen.h index 73e7449b3..8e808a2a3 100644 --- a/wire/onion_wiregen.h +++ b/wire/onion_wiregen.h @@ -317,4 +317,4 @@ bool fromwire_mpp_timeout(const void *p); #endif /* LIGHTNING_WIRE_ONION_WIREGEN_H */ -// SHA256STAMP:71be5e63440a00cd787385b25d9d802d14c6e8c71a7003a260fa6b21f5ecea23 +// SHA256STAMP:b64074e7469fc3eb617387ecd9381141df9f2fab9200406e73c2120b8e8311a2 diff --git a/wire/peer_printgen.c b/wire/peer_printgen.c index 3ee52ff02..74baba6a4 100644 --- a/wire/peer_printgen.c +++ b/wire/peer_printgen.c @@ -2935,4 +2935,4 @@ void printpeer_wire_tlv_message(const char *tlv_name, const u8 *msg) { printwire_tlvs(tlv_name, &msg, &plen, print_tlvs_onion_message_tlvs, ARRAY_SIZE(print_tlvs_onion_message_tlvs)); } } -// SHA256STAMP:13b9d519f8dde4c4d6a6995a2961d9d6ef810cc9f81d3ab1bd054da4c383ffe0 +// SHA256STAMP:d4f6f16581d26f95c512a5a98e962abe529ff37a70a7563bd41f25ac802bdb63 diff --git a/wire/peer_printgen.h b/wire/peer_printgen.h index 64f1fe6c8..a678cadb6 100644 --- a/wire/peer_printgen.h +++ b/wire/peer_printgen.h @@ -96,4 +96,4 @@ void printwire_channel_update_checksums(const char *fieldname, const u8 **cursor void printwire_channel_update_timestamps(const char *fieldname, const u8 **cursor, size_t *plen); void printwire_witness_stack(const char *fieldname, const u8 **cursor, size_t *plen); #endif /* LIGHTNING_WIRE_PEER_PRINTGEN_H */ -// SHA256STAMP:13b9d519f8dde4c4d6a6995a2961d9d6ef810cc9f81d3ab1bd054da4c383ffe0 +// SHA256STAMP:d4f6f16581d26f95c512a5a98e962abe529ff37a70a7563bd41f25ac802bdb63 diff --git a/wire/peer_wiregen.c b/wire/peer_wiregen.c index dc699e404..a68a87366 100644 --- a/wire/peer_wiregen.c +++ b/wire/peer_wiregen.c @@ -248,7 +248,7 @@ bool fromwire_init_tlvs(const u8 **cursor, size_t *max, struct tlv_init_tlvs *re bool init_tlvs_is_valid(const struct tlv_init_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -380,7 +380,7 @@ bool fromwire_n1(const u8 **cursor, size_t *max, struct tlv_n1 *record) bool n1_is_valid(const struct tlv_n1 *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -459,7 +459,7 @@ bool fromwire_n2(const u8 **cursor, size_t *max, struct tlv_n2 *record) bool n2_is_valid(const struct tlv_n2 *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -513,7 +513,7 @@ bool fromwire_open_channel_tlvs(const u8 **cursor, size_t *max, struct tlv_open_ bool open_channel_tlvs_is_valid(const struct tlv_open_channel_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -567,7 +567,7 @@ bool fromwire_accept_channel_tlvs(const u8 **cursor, size_t *max, struct tlv_acc bool accept_channel_tlvs_is_valid(const struct tlv_accept_channel_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -627,7 +627,7 @@ bool fromwire_opening_tlvs(const u8 **cursor, size_t *max, struct tlv_opening_tl bool opening_tlvs_is_valid(const struct tlv_opening_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -687,7 +687,7 @@ bool fromwire_accept_tlvs(const u8 **cursor, size_t *max, struct tlv_accept_tlvs bool accept_tlvs_is_valid(const struct tlv_accept_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -744,7 +744,7 @@ bool fromwire_shutdown_tlvs(const u8 **cursor, size_t *max, struct tlv_shutdown_ bool shutdown_tlvs_is_valid(const struct tlv_shutdown_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -802,7 +802,7 @@ bool fromwire_query_short_channel_ids_tlvs(const u8 **cursor, size_t *max, struc bool query_short_channel_ids_tlvs_is_valid(const struct tlv_query_short_channel_ids_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -857,7 +857,7 @@ bool fromwire_query_channel_range_tlvs(const u8 **cursor, size_t *max, struct tl bool query_channel_range_tlvs_is_valid(const struct tlv_query_channel_range_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -943,7 +943,7 @@ bool fromwire_reply_channel_range_tlvs(const u8 **cursor, size_t *max, struct tl bool reply_channel_range_tlvs_is_valid(const struct tlv_reply_channel_range_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -998,7 +998,7 @@ bool fromwire_onion_message_tlvs(const u8 **cursor, size_t *max, struct tlv_onio bool onion_message_tlvs_is_valid(const struct tlv_onion_message_tlvs *record, size_t *err_index) { - return tlv_fields_valid(record->fields, err_index); + return tlv_fields_valid(record->fields, NULL, err_index); } @@ -2330,4 +2330,4 @@ bool fromwire_channel_update_option_channel_htlc_max(const void *p, secp256k1_ec *htlc_maximum_msat = fromwire_amount_msat(&cursor, &plen); return cursor != NULL; } -// SHA256STAMP:13b9d519f8dde4c4d6a6995a2961d9d6ef810cc9f81d3ab1bd054da4c383ffe0 +// SHA256STAMP:d4f6f16581d26f95c512a5a98e962abe529ff37a70a7563bd41f25ac802bdb63 diff --git a/wire/peer_wiregen.h b/wire/peer_wiregen.h index 952a59028..994b98a0e 100644 --- a/wire/peer_wiregen.h +++ b/wire/peer_wiregen.h @@ -859,4 +859,4 @@ bool fromwire_channel_update_option_channel_htlc_max(const void *p, secp256k1_ec #endif /* LIGHTNING_WIRE_PEER_WIREGEN_H */ -// SHA256STAMP:13b9d519f8dde4c4d6a6995a2961d9d6ef810cc9f81d3ab1bd054da4c383ffe0 +// SHA256STAMP:d4f6f16581d26f95c512a5a98e962abe529ff37a70a7563bd41f25ac802bdb63 diff --git a/wire/tlvstream.c b/wire/tlvstream.c index eb27a16cc..1a03625fc 100644 --- a/wire/tlvstream.c +++ b/wire/tlvstream.c @@ -205,14 +205,31 @@ fail: return false; } -bool tlv_fields_valid(const struct tlv_field *fields, size_t *err_index) +static bool tlv_type_is_allowed(const struct tlv_field *f, u64 *extra_types) { + /* Simple case: we have internal meta fields or it's an odd field. */ + if (f->numtype % 2 != 0 || f->meta != NULL) + return true; + + if (extra_types == NULL) + return false; + + /* Now iterate through the extras and see if we should make an + * exception. */ + for (size_t i = 0; i < tal_count(extra_types); i++) + if (extra_types[i] == f->numtype) + return true; + return false; +} + +bool tlv_fields_valid(const struct tlv_field *fields, u64 *allow_extra, + size_t *err_index) { size_t numfields = tal_count(fields); bool first = true; u64 prev_type = 0; for (int i=0; inumtype % 2 == 0 && f->meta == NULL) { + if (!tlv_type_is_allowed(f, allow_extra)) { /* BOLT #1: * - otherwise, if `type` is unknown: * - if `type` is even: diff --git a/wire/tlvstream.h b/wire/tlvstream.h index d0da839cd..964104a9f 100644 --- a/wire/tlvstream.h +++ b/wire/tlvstream.h @@ -45,9 +45,8 @@ bool fromwire_tlv(const u8 **cursor, size_t *max, void towire_tlv(u8 **pptr, const struct tlv_record_type *types, size_t num_types, const void *record); -bool tlv_fields_valid(const struct tlv_field *fields, size_t *err_index); - - +bool tlv_fields_valid(const struct tlv_field *fields, u64 *allow_extra, + size_t *err_index); /* Generic primitive setters for tlvstreams. */ void tlvstream_set_raw(struct tlv_field **stream, u64 type, void *value, size_t valuelen);