From 7e719c2b8af177593b1cdaedec8bc465a6e9f7fb Mon Sep 17 00:00:00 2001 From: Nipun Sujesh Date: Thu, 26 Mar 2026 08:16:23 +0530 Subject: [PATCH] fix: guard getBorders() against empty lines input When ps output is empty or malformed (e.g. BusyBox on Alpine), parseLines() returns an empty array and getBorders() crashes trying to access lines[0].spaces on undefined. --- src/main/ts/ingrid.ts | 6 ++++-- src/test/ts/ingrid.test.ts | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/ts/ingrid.ts b/src/main/ts/ingrid.ts index 6c34353..0444a26 100644 --- a/src/main/ts/ingrid.ts +++ b/src/main/ts/ingrid.ts @@ -67,14 +67,16 @@ export const parseLines = (input: string, sep?: string): TLineDigest[] => const countWordsByIndex = ({words}: TLineDigest, index: number): number => words.filter(({e}) => e < index).length -export const getBorders = (lines: TLineDigest[]): number[] => - lines[0].spaces.reduce((m, i) => { +export const getBorders = (lines: TLineDigest[]): number[] => { + if (lines.length === 0) return [] + return lines[0].spaces.reduce((m, i) => { const c = countWordsByIndex(lines[0], i) if (lines.every(l => l.spaces.includes(i) && c === countWordsByIndex(l, i))) { m.push(i) } return m }, []) +} // eslint-disable-next-line sonarjs/cognitive-complexity export const parseUnixGrid = (input: string): TIngridResponse => { diff --git a/src/test/ts/ingrid.test.ts b/src/test/ts/ingrid.test.ts index eab906f..f0af0d9 100644 --- a/src/test/ts/ingrid.test.ts +++ b/src/test/ts/ingrid.test.ts @@ -67,6 +67,11 @@ a b c const result = getBorders(lines) assert.deepEqual(result, [3, 7, 8]) }) + + it('returns empty array for empty input', () => { + const result = getBorders([]) + assert.deepEqual(result, []) + }) }) describe('parse()', () => {