From c3cc65394820ab87e413c6f6b49b1c228d237272 Mon Sep 17 00:00:00 2001 From: minas90 Date: Thu, 20 May 2021 16:20:25 +0400 Subject: [PATCH] Avoid live collection (#694) * avoid live collection * fix another possible infinite loop for libs with no live collection support --- Readability.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Readability.js b/Readability.js index a7d1b7fa..932f3637 100644 --- a/Readability.js +++ b/Readability.js @@ -390,8 +390,8 @@ Readability.prototype = { } else { // if the link has multiple children, they should all be preserved var container = this._doc.createElement("span"); - while (link.childNodes.length > 0) { - container.appendChild(link.childNodes[0]); + while (link.firstChild) { + container.appendChild(link.firstChild); } link.parentNode.replaceChild(container, link); } @@ -1085,10 +1085,9 @@ Readability.prototype = { neededToCreateTopCandidate = true; // Move everything (not just elements, also text nodes etc.) into the container // so we even include text directly in the body: - var kids = page.childNodes; - while (kids.length) { - this.log("Moving child out:", kids[0]); - topCandidate.appendChild(kids[0]); + while (page.firstChild) { + this.log("Moving child out:", page.firstChild); + topCandidate.appendChild(page.firstChild); } page.appendChild(topCandidate); @@ -1219,6 +1218,9 @@ Readability.prototype = { } articleContent.appendChild(sibling); + // Fetch children again to make it compatible + // with DOM parsers without live collection support. + siblings = parentOfTopCandidate.children; // siblings is a reference to the children array, and // sibling is removed from the array when we call appendChild(). // As a result, we must revisit this index since the nodes