From 71a2c0264eedb23557efa7a4e05024e8fd8fd2dd Mon Sep 17 00:00:00 2001 From: Dev Randalpura Date: Wed, 13 May 2026 14:43:49 -0400 Subject: [PATCH] fix(ui): clamped table column widths (#26991) Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../cli/src/ui/utils/TableRenderer.test.tsx | 18 ++++++++++++++++++ packages/cli/src/ui/utils/TableRenderer.tsx | 4 +++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/ui/utils/TableRenderer.test.tsx b/packages/cli/src/ui/utils/TableRenderer.test.tsx index 4735f682b8..7c88206872 100644 --- a/packages/cli/src/ui/utils/TableRenderer.test.tsx +++ b/packages/cli/src/ui/utils/TableRenderer.test.tsx @@ -265,6 +265,24 @@ describe('TableRenderer', () => { unmount(); }); + it('handles extremely small terminal widths without crashing', async () => { + const headers = ['Col 1', 'Col 2']; + const rows = [['Data 1', 'Data 2']]; + // This width is much smaller than the overhead, which could lead to negative column widths + const terminalWidth = 1; + + const renderResult = await renderWithProviders( + , + ); + const { unmount } = renderResult; + // If it didn't throw RangeError: Invalid count value, the test passes + unmount(); + }); + it.each([ { name: 'handles non-ASCII characters (emojis and Asian scripts) correctly', diff --git a/packages/cli/src/ui/utils/TableRenderer.tsx b/packages/cli/src/ui/utils/TableRenderer.tsx index d6dd9c3303..effce82829 100644 --- a/packages/cli/src/ui/utils/TableRenderer.tsx +++ b/packages/cli/src/ui/utils/TableRenderer.tsx @@ -250,7 +250,9 @@ export const TableRenderer: React.FC = ({ }; const char = chars[type]; - const borderParts = adjustedWidths.map((w) => char.horizontal.repeat(w)); + const borderParts = adjustedWidths.map((w) => + char.horizontal.repeat(Math.max(0, w || 0)), + ); const border = char.left + borderParts.join(char.middle) + char.right; return {border};