From 7b0f3a2c03f09d5040e65f99c78277d0adcefaca Mon Sep 17 00:00:00 2001 From: AndyMik90 Date: Sat, 14 Feb 2026 14:33:26 +0100 Subject: [PATCH] fix: cap terminal paste size to 1MB to prevent GPU context exhaustion Large clipboard pastes can cause GPU memory pressure when multiple terminals are rendering simultaneously, leading to app crashes. Co-Authored-By: Claude Opus 4.6 --- .../src/renderer/components/terminal/useXterm.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/frontend/src/renderer/components/terminal/useXterm.ts b/apps/frontend/src/renderer/components/terminal/useXterm.ts index 3c46bca3..f2382c7d 100644 --- a/apps/frontend/src/renderer/components/terminal/useXterm.ts +++ b/apps/frontend/src/renderer/components/terminal/useXterm.ts @@ -139,11 +139,18 @@ export function useXterm({ terminalId, onCommandEnter, onResize, onDimensionsRea }; // Helper function to handle paste from clipboard + // Cap paste size to prevent GPU/memory pressure from extremely large clipboard contents. + const MAX_PASTE_BYTES = 1_048_576; // 1 MB const handlePasteFromClipboard = (): void => { navigator.clipboard.readText() .then((text) => { if (text) { - xterm.paste(text); + if (text.length > MAX_PASTE_BYTES) { + console.warn(`[useXterm] Paste truncated from ${text.length} to ${MAX_PASTE_BYTES} bytes`); + xterm.paste(text.slice(0, MAX_PASTE_BYTES)); + } else { + xterm.paste(text); + } } }) .catch((err) => {