提交 e8befb9f 编写于 作者: R rebornix

textModel validate position handles NaN.

上级 cc84951f
......@@ -898,6 +898,9 @@ export class TextModel extends Disposable implements model.ITextModel {
* @param strict Do NOT allow a position inside a high-low surrogate pair
*/
private _isValidPosition(lineNumber: number, column: number, strict: boolean): boolean {
if (isNaN(lineNumber)) {
return false;
}
if (lineNumber < 1) {
return false;
......@@ -908,6 +911,10 @@ export class TextModel extends Disposable implements model.ITextModel {
return false;
}
if (isNaN(column)) {
return false;
}
if (column < 1) {
return false;
}
......@@ -933,8 +940,8 @@ export class TextModel extends Disposable implements model.ITextModel {
* @param strict Do NOT allow a position inside a high-low surrogate pair
*/
private _validatePosition(_lineNumber: number, _column: number, strict: boolean): Position {
const lineNumber = Math.floor(typeof _lineNumber === 'number' ? _lineNumber : 1);
const column = Math.floor(typeof _column === 'number' ? _column : 1);
const lineNumber = Math.floor((typeof _lineNumber === 'number' && !isNaN(_lineNumber)) ? _lineNumber : 1);
const column = Math.floor((typeof _column === 'number' && !isNaN(_column)) ? _column : 1);
const lineCount = this._buffer.getLineCount();
if (lineNumber < 1) {
......
......@@ -620,6 +620,18 @@ suite('Editor Model - TextModel', () => {
});
test('validatePosition handle NaN.', () => {
let m = TextModel.createFromString('line one\nline two');
assert.deepEqual(m.validatePosition(new Position(NaN, 1)), new Position(1, 1));
assert.deepEqual(m.validatePosition(new Position(1, NaN)), new Position(1, 1));
assert.deepEqual(m.validatePosition(new Position(NaN, NaN)), new Position(1, 1));
assert.deepEqual(m.validatePosition(new Position(2, NaN)), new Position(2, 1));
assert.deepEqual(m.validatePosition(new Position(NaN, 3)), new Position(1, 3));
});
test('validateRange around high-low surrogate pairs 1', () => {
let m = TextModel.createFromString('a📚b');
......@@ -829,6 +841,12 @@ suite('Editor Model - TextModel', () => {
assert.equal(model.getLineLastNonWhitespaceColumn(11), 0, '11');
assert.equal(model.getLineLastNonWhitespaceColumn(12), 0, '12');
});
test('#50471. getValueInRange with invalid range', () => {
let m = TextModel.createFromString('My First Line\r\nMy Second Line\r\nMy Third Line');
assert.equal(m.getValueInRange(new Range(1, NaN, 1, 3)), 'My');
assert.equal(m.getValueInRange(new Range(NaN, NaN, NaN, NaN)), '');
});
});
suite('TextModel.mightContainRTL', () => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册