From 0c4e942a7e8215ac9fb46ca27625a4f93b75d43e Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 5 Sep 2016 19:35:26 +0300 Subject: [PATCH] EA-87991 EA-87365 diff: do not access Document outside of valid ranges --- .../src/com/intellij/diff/util/LineCol.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/platform/diff-api/src/com/intellij/diff/util/LineCol.java b/platform/diff-api/src/com/intellij/diff/util/LineCol.java index 95201b9ed32b..04cd28ebc819 100644 --- a/platform/diff-api/src/com/intellij/diff/util/LineCol.java +++ b/platform/diff-api/src/com/intellij/diff/util/LineCol.java @@ -60,9 +60,16 @@ public class LineCol { @NotNull public static LineCol fromOffset(@NotNull Document document, int offset) { - int line = document.getLineNumber(offset); - int column = offset - document.getLineStartOffset(line); - return new LineCol(line, column); + if (offset < document.getTextLength()) { + int line = document.getLineNumber(offset); + int column = offset - document.getLineStartOffset(line); + return new LineCol(line, column); + } + else { + int line = Math.max(0, document.getLineCount() - 1); + int column = document.getLineEndOffset(line) - document.getLineStartOffset(line); + return new LineCol(line, column); + } } @NotNull @@ -79,7 +86,8 @@ public class LineCol { } public int toOffset(@NotNull Document document) { - return document.getLineStartOffset(line) + column; + if (line >= document.getLineCount()) return document.getTextLength(); + return Math.min(document.getLineStartOffset(line) + column, document.getLineEndOffset(line)); } public int toOffset(@NotNull Editor editor) {