From 44d99733c63f33c85e97a8edce3d50c8ba192846 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Thu, 30 Sep 2021 13:39:02 -0400 Subject: [PATCH] Changeset: Check `.hasNext()` before calling `.next()` --- src/node/utils/padDiff.js | 4 ++-- src/static/js/Changeset.js | 4 +++- src/static/js/linestylefilter.js | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.js index fa612c7c2..900a452c7 100644 --- a/src/node/utils/padDiff.js +++ b/src/node/utils/padDiff.js @@ -286,7 +286,7 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) { curLineOpIterLine = curLine; let indexIntoLine = 0; let done = false; - while (!done) { + while (!done && curLineOpIter.hasNext()) { curLineNextOp = curLineOpIter.next(); if (indexIntoLine + curLineNextOp.chars >= curChar) { curLineNextOp.chars -= (curChar - indexIntoLine); @@ -307,7 +307,7 @@ PadDiff.prototype._createDeletionChangeset = function (cs, startAText, apool) { } if (!curLineNextOp.chars) { - curLineNextOp = curLineOpIter.next(); + curLineNextOp = curLineOpIter.hasNext() ? curLineOpIter.next() : Changeset.newOp(); } const charsToUse = Math.min(numChars, curLineNextOp.chars); diff --git a/src/static/js/Changeset.js b/src/static/js/Changeset.js index ead0e97a9..07e17e5b7 100644 --- a/src/static/js/Changeset.js +++ b/src/static/js/Changeset.js @@ -2072,7 +2072,9 @@ exports.inverse = (cs, lines, alines, pool) => { curLineNextOp.chars = 0; curLineOpIter = exports.opIterator(alinesGet(curLine)); } - if (!curLineNextOp.chars) curLineNextOp = curLineOpIter.next(); + if (!curLineNextOp.chars) { + curLineNextOp = curLineOpIter.hasNext() ? curLineOpIter.next() : exports.newOp(); + } const charsToUse = Math.min(numChars, curLineNextOp.chars); func(charsToUse, curLineNextOp.attribs, charsToUse === curLineNextOp.chars && curLineNextOp.lines > 0); diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.js index ac8df82f4..84668ea46 100644 --- a/src/static/js/linestylefilter.js +++ b/src/static/js/linestylefilter.js @@ -108,7 +108,7 @@ linestylefilter.getLineStyleFilter = (lineLength, aline, textAndClassFunc, apool let nextOp, nextOpClasses; const goNextOp = () => { - nextOp = attributionIter.next(); + nextOp = attributionIter.hasNext() ? attributionIter.next() : Changeset.newOp(); nextOpClasses = (nextOp.opcode && attribsToClasses(nextOp.attribs)); }; goNextOp();