From 8b1c5c4ffba6f2a001484e7e103e19e617e7fe3e Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 21 Dec 2022 16:51:45 -0800 Subject: [PATCH 1/2] Revert "Fix NPE in webgl renderer" This reverts commit ea7571c2b91e99df37ca1e1009c28b25e528e923. --- addons/xterm-addon-webgl/src/WebglRenderer.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/addons/xterm-addon-webgl/src/WebglRenderer.ts b/addons/xterm-addon-webgl/src/WebglRenderer.ts index d87f74ed..7f8c6afc 100644 --- a/addons/xterm-addon-webgl/src/WebglRenderer.ts +++ b/addons/xterm-addon-webgl/src/WebglRenderer.ts @@ -352,7 +352,7 @@ export class WebglRenderer extends Disposable implements IRenderer { let lastBg: number; let y: number; let row: number; - let line: IBufferLine | undefined; + let line: IBufferLine; let joinedRanges: [number, number][]; let isJoined: boolean; let lastCharX: number; @@ -365,10 +365,7 @@ export class WebglRenderer extends Disposable implements IRenderer { for (y = start; y <= end; y++) { row = y + terminal.buffer.ydisp; - line = terminal.buffer.lines.get(row); - if (!line) { - break; - } + line = terminal.buffer.lines.get(row)!; this._model.lineLengths[y] = 0; joinedRanges = this._characterJoinerService.getJoinedCharacters(row); for (x = 0; x < terminal.cols; x++) { From 568e4c69354dca18823ea0b6aecedabb92f5b395 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 21 Dec 2022 16:55:03 -0800 Subject: [PATCH 2/2] Clamp start and end in render service to ensure they're valid Fixes #4314 --- src/browser/services/RenderService.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/browser/services/RenderService.ts b/src/browser/services/RenderService.ts index 75ca2867..c31d061a 100644 --- a/src/browser/services/RenderService.ts +++ b/src/browser/services/RenderService.ts @@ -152,6 +152,14 @@ export class RenderService extends Disposable implements IRenderService { if (!this._renderer) { return; } + + // Since this is debounced, a resize event could have happened between the time a refresh was + // requested and when this triggers. Clamp the values of start and end to ensure they're valid + // given the current viewport state. + start = Math.min(start, this._rowCount - 1); + end = Math.min(end, this._rowCount - 1); + + // Render this._renderer.renderRows(start, end); // Update selection if needed