From 613f27c46d56378a9d5d6acb1087c69fc52dba76 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Tue, 1 Nov 2022 11:10:27 +0100 Subject: [PATCH] Limit shifting --- src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts b/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts index 9fb27bf25edd4..59ac41dafc386 100644 --- a/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts +++ b/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts @@ -98,11 +98,13 @@ export function shiftSequenceDiffs(sequence1: ISequence, sequence2: ISequence, s } function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, sequence2: ISequence, seq2NextStart: number, seq2PrevEndExclusive: number) { + const maxShiftLimit = 20; // To prevent performance issues + // don't touch previous or next! let deltaBefore = 1; while (diff.seq1Range.start - deltaBefore > seq2PrevEndExclusive && sequence2.getElement(diff.seq2Range.start - deltaBefore) === - sequence2.getElement(diff.seq2Range.endExclusive - deltaBefore)) { + sequence2.getElement(diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit) { deltaBefore++; } deltaBefore--; @@ -110,7 +112,7 @@ function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, seq let deltaAfter = 1; while (diff.seq1Range.start + deltaAfter < seq2NextStart && sequence2.getElement(diff.seq2Range.start + deltaAfter) === - sequence2.getElement(diff.seq2Range.endExclusive + deltaAfter)) { + sequence2.getElement(diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit) { deltaAfter++; } deltaAfter--;