From ca666da08b6f595dc0aed252a170d36675beba54 Mon Sep 17 00:00:00 2001 From: Peng Lyu Date: Thu, 15 Mar 2018 17:58:20 -0700 Subject: [PATCH] Fix #45892. Null check --- .../common/model/pieceTreeTextBuffer/pieceTreeBase.ts | 6 ++++++ .../pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts index 0d9c29f6d37..83a1db656cb 100644 --- a/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts +++ b/src/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.ts @@ -592,7 +592,13 @@ export class PieceTreeBase { const searcher = new Searcher(searchData.wordSeparators, searchData.regex); let startPostion = this.nodeAt2(searchRange.startLineNumber, searchRange.startColumn); + if (startPostion === null) { + return []; + } let endPosition = this.nodeAt2(searchRange.endLineNumber, searchRange.endColumn); + if (endPosition === null) { + return []; + } let start = this.positionInBuffer(startPostion.node, startPostion.remainder); let end = this.positionInBuffer(endPosition.node, endPosition.remainder); diff --git a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts index 8109b1c7911..6cea58bbd4f 100644 --- a/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts +++ b/src/vs/editor/test/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.test.ts @@ -14,6 +14,8 @@ import { SENTINEL, NodeColor, TreeNode } from 'vs/editor/common/model/pieceTreeT import { PieceTreeTextBuffer } from 'vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer'; import { TextModel } from 'vs/editor/common/model/textModel'; import { ITextSnapshot } from 'vs/platform/files/common/files'; +import { SearchData } from 'vs/editor/common/model/textModelSearch'; +import { WordCharacterClassifier } from 'vs/editor/common/controller/wordCharacterClassifier'; const alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n'; @@ -1776,4 +1778,13 @@ suite('snapshot', () => { assert.notEqual(model.getLinesContent().join('\n'), getValueInSnapshot(snapshot)); }); +}); + +suite('chunk based search', () => { + test('#45892. For some cases, the buffer is empty but we still try to search', () => { + let pieceTree = createTextBuffer(['']); + pieceTree.delete(0, 1); + let ret = pieceTree.findMatchesLineByLine(new Range(1, 1, 1, 1), new SearchData(/abc/, new WordCharacterClassifier(',./'), 'abc'), true, 1000); + assert.equal(ret.length, 0); + }); }); \ No newline at end of file