diff --git a/app/utils/arrays.test.ts b/app/utils/arrays.test.ts index 6140d042c..d6a06e67a 100644 --- a/app/utils/arrays.test.ts +++ b/app/utils/arrays.test.ts @@ -36,6 +36,12 @@ describe("diff", () => { const result = diff(arr1, arr2); expect(result).toEqual([]); }); + + it("should not overflow the stack for very large counts", () => { + const arr2 = new Array(200_000).fill(1); + const result = diff([], arr2); + expect(result).toHaveLength(200_000); + }); }); describe("mostPopularArrayElement", () => { diff --git a/app/utils/arrays.ts b/app/utils/arrays.ts index b0444e5ec..a206936a7 100644 --- a/app/utils/arrays.ts +++ b/app/utils/arrays.ts @@ -53,7 +53,9 @@ export function diff(arr1: T[], arr2: T[]): T[] { const result: T[] = []; for (const [element, count] of diff) { - result.push(...new Array(count).fill(element)); + for (let i = 0; i < count; i++) { + result.push(element); + } } return result;