From cc8edccb7ba1f156a72204f8e19a0bed1948a85e Mon Sep 17 00:00:00 2001 From: Sanan507 <227714367+Sanan507@users.noreply.github.com> Date: Fri, 11 Sep 2026 15:47:29 +0000 Subject: [PATCH] Fix integer overflow in binary search midpoint calculations --- .../visualizer/algorithms/sorting/MergeSortModel.java | 2 +- frontend/src/data/algorithmCodeSnippets.ts | 2 +- frontend/src/data/gymChallenges.ts | 2 +- frontend/src/workers/simulationWorker.ts | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/algorithmrace/visualizer/algorithms/sorting/MergeSortModel.java b/backend/src/main/java/com/algorithmrace/visualizer/algorithms/sorting/MergeSortModel.java index 5e236a7..62a0ae5 100644 --- a/backend/src/main/java/com/algorithmrace/visualizer/algorithms/sorting/MergeSortModel.java +++ b/backend/src/main/java/com/algorithmrace/visualizer/algorithms/sorting/MergeSortModel.java @@ -15,7 +15,7 @@ public MergeSortModel() { private void buildOps(int l, int r) { if (l >= r) return; - int m = (l + r) / 2; + int m = l + (r - l) / 2; buildOps(l, m); buildOps(m + 1, r); ops.add(new int[] {l, m, r}); diff --git a/frontend/src/data/algorithmCodeSnippets.ts b/frontend/src/data/algorithmCodeSnippets.ts index c565ced..2062949 100644 --- a/frontend/src/data/algorithmCodeSnippets.ts +++ b/frontend/src/data/algorithmCodeSnippets.ts @@ -612,7 +612,7 @@ function merge(L: number[], R: number[]): number[] { code: `function binarySearch(arr: number[], target: number): number { let lo = 0, hi = arr.length - 1; while (lo <= hi) { // loop - const mid = Math.floor((lo + hi) / 2); + const mid = lo + Math.floor((hi - lo) / 2); if (arr[mid] === target) return mid; // found! if (arr[mid] < target) lo = mid + 1; // narrow right else hi = mid - 1; // narrow left diff --git a/frontend/src/data/gymChallenges.ts b/frontend/src/data/gymChallenges.ts index 41598cf..174ec35 100644 --- a/frontend/src/data/gymChallenges.ts +++ b/frontend/src/data/gymChallenges.ts @@ -286,7 +286,7 @@ export const BUG_HUNT_CHALLENGES: BugHuntChallenge[] = [ while (low <= high) { // ⚠️ Bug line below: - const mid = Math.floor((low + high) / 2); + const mid = low + Math.floor((high - low) / 2); if (arr[mid] === target) { return mid; diff --git a/frontend/src/workers/simulationWorker.ts b/frontend/src/workers/simulationWorker.ts index d1b104d..e7b2ce8 100644 --- a/frontend/src/workers/simulationWorker.ts +++ b/frontend/src/workers/simulationWorker.ts @@ -227,7 +227,7 @@ function simulateSingleSortingAlgorithm( // MergeSort function mergeSort(l: number, r: number) { if (l < r) { - const m = Math.floor((l + r) / 2); + const m = l + Math.floor((r - l) / 2); mergeSort(l, m); mergeSort(m + 1, r); merge(l, m, r); @@ -535,7 +535,7 @@ function simulateSingleSearchingAlgorithm( let right = arr.length - 1; while (left <= right) { - const mid = Math.floor((left + right) / 2); + const mid = left + Math.floor((right - left) / 2); comparisons++; steps++;