From 6b91497223fcc261d0e8e53b7f33c58b4ae6241e Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 23 May 2024 10:56:59 +0930 Subject: [PATCH] common: make gossmap ignore redundant channel_announcements. This seems to be happening to some people, so don't panic. Unfortunately we don't have a good error callback here, so msg to stderr. Fixes: https://github.com/ElementsProject/lightning/issues/7249 Signed-off-by: Rusty Russell --- common/gossmap.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/common/gossmap.c b/common/gossmap.c index dd834b63952b..fe2f420fd1cf 100644 --- a/common/gossmap.c +++ b/common/gossmap.c @@ -458,9 +458,16 @@ static struct gossmap_chan *add_channel(struct gossmap *map, map_nodeid(map, cannounce_off + plus_scid_off + 8, &node_id[0]); map_nodeid(map, cannounce_off + plus_scid_off + 8 + PUBKEY_CMPR_LEN, &node_id[1]); - /* We 1should not get duplicates. */ + /* We should not get duplicates. */ scid.u64 = map_be64(map, cannounce_off + plus_scid_off); - assert(!gossmap_find_chan(map, &scid)); + chan = gossmap_find_chan(map, &scid); + if (chan) { + /* FIXME: Report this better! */ + warnx("gossmap: redundant channel_announce for %s, offsets %u and %zu!", + fmt_short_channel_id(tmpctx, scid), + chan->cann_off, cannounce_off); + return NULL; + } /* We carefully map pointers to indexes, since new_node can move them! */ n[0] = gossmap_find_node(map, &node_id[0]);