From cd05d444c3c52e2240252e4df83b94833fe5f46b Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sat, 20 Jun 2026 14:44:28 +0300 Subject: [PATCH] Fix stack overflow in diff() for large element counts --- app/utils/arrays.test.ts | 6 ++++++ app/utils/arrays.ts | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) 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;