From 17742f9ed237fb91e0392809b01bedcd277d48bc Mon Sep 17 00:00:00 2001 From: Andre Staltz Date: Wed, 17 Jan 2024 15:47:58 +0200 Subject: [PATCH] avoid infinite loop in Tangle.precedes() --- lib/msg-v4/tangle.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/msg-v4/tangle.js b/lib/msg-v4/tangle.js index 276a178..9e0c6fa 100644 --- a/lib/msg-v4/tangle.js +++ b/lib/msg-v4/tangle.js @@ -296,13 +296,19 @@ class Tangle { if (msgAID === msgBID) return false if (msgBID === this.#rootID) return false let toCheck = [msgBID] + const checked = new Set() while (toCheck.length > 0) { const checking = /** @type {string} */ (toCheck.shift()) + checked.add(checking) const prev = this.#prev.get(checking) if (!prev) continue - if (prev.includes(msgAID)) return true - toCheck.push(...prev) + if (prev.includes(msgAID)) { + checked.clear() + return true + } + toCheck.push(...prev.filter((p) => !checked.has(p))) } + checked.clear() return false }