From 6515c83446c81dc0c5b1a67cf68b85bc10968623 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 2 May 2017 15:38:02 +0300 Subject: [PATCH] disable document changes during batch folding update and add bounds-checking assertions to EditorSizeManager (to prevent EA-82327) --- .../src/com/intellij/openapi/editor/impl/FoldingModelImpl.java | 1 + .../intellij/openapi/editor/impl/view/EditorSizeManager.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java index d3dd779431af..f4540b7d7309 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java @@ -561,6 +561,7 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedInternalDocu @Override public void beforeDocumentChange(DocumentEvent event) { + if (myIsBatchFoldingProcessing) LOG.error("Document changes are not allowed during batch folding update"); myDocumentChangeProcessed = false; } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java index 5b6d786efd80..b997117c9de8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java @@ -378,6 +378,8 @@ class EditorSizeManager extends InlayModel.SimpleAdapter implements PrioritizedD } void textLayoutPerformed(int startOffset, int endOffset) { + assert 0 <= startOffset && startOffset < endOffset && endOffset <= myDocument.getTextLength() + : "startOffset=" + startOffset + ", endOffset=" + endOffset; if (myDocument.isInBulkUpdate()) return; if (myEditor.getFoldingModel().isInBatchFoldingOperation()) { myDeferredRanges.add(new TextRange(startOffset, endOffset));