From 6459c1e5d4b1369be4ae694e622a367ffbf2e97b Mon Sep 17 00:00:00 2001 From: jrobinso Date: Fri, 4 Jun 2021 23:47:18 -0700 Subject: [PATCH] Fix integer overflow when computing alignment interval centers for large chromosomes. Fixes #977 --- src/main/java/org/broad/igv/sam/AlignmentDataManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/broad/igv/sam/AlignmentDataManager.java b/src/main/java/org/broad/igv/sam/AlignmentDataManager.java index 1c0122fc75..b04d4720ff 100644 --- a/src/main/java/org/broad/igv/sam/AlignmentDataManager.java +++ b/src/main/java/org/broad/igv/sam/AlignmentDataManager.java @@ -354,8 +354,8 @@ public void load(ReferenceFrame frame, // Expand the interval by the lesser of +/- a 2 screens, or max visible range int windowSize = Math.min(4 * (end - start), PreferencesManager.getPreferences().getAsInt(SAM_MAX_VISIBLE_RANGE) * 1000); - int center = (end + start) / 2; - int expand = Math.max(end - start, windowSize / 2); + int center = start + (end - start) / 2; // Be careful how you calculate this -- potential overflow for large chromosomes + int expand = Math.min(Integer.MAX_VALUE - center, Math.max(end - start, windowSize / 2)); if (expandEnds) { adjustedStart = Math.max(0, Math.min(start, center - expand));