Skip to content

Commit

Permalink
Protect more calculated end positions from integer overflow. See issue
Browse files Browse the repository at this point in the history
  • Loading branch information
jrobinso committed Jul 13, 2021
1 parent 5fd66df commit 40b16d0
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/main/java/org/broad/igv/methyl/MethylTrack.java
Expand Up @@ -106,6 +106,9 @@ public void load(ReferenceFrame frame) {
int width = (end - start) / 2;
int expandedStart = Math.max(0, start - width);
int expandedEnd = end + width;
if(expandedEnd < 0) {
expandedEnd = Integer.MAX_VALUE; // Overflow
}

List<MethylScore> scores = new ArrayList<MethylScore>(1000);
Iterator<MethylScore> iter = dataSource.query(chr, expandedStart, expandedEnd);
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/org/broad/igv/sam/AlignmentDataManager.java
Expand Up @@ -360,6 +360,9 @@ public void load(ReferenceFrame frame,
if (expandEnds) {
adjustedStart = Math.max(0, Math.min(start, center - expand));
adjustedEnd = Math.max(end, center + expand);
if(adjustedEnd < 0) {
adjustedEnd = Integer.MAX_VALUE; // Overflow
}
}

AlignmentInterval loadedInterval = loadInterval(chr, adjustedStart, adjustedEnd, renderOptions);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/org/broad/igv/track/DataTrack.java
Expand Up @@ -141,6 +141,10 @@ public synchronized void load(ReferenceFrame referenceFrame) {
int delta = multiLocus ? 1 : (end - start) / 2;
int expandedStart = Math.max(0, start - delta);
int expandedEnd = Math.min(maxEnd, end + delta);
if(expandedEnd < 0) {
// overflow
expandedEnd = Integer.MAX_VALUE;
}
LoadedDataInterval<List<LocusScore>> interval = getSummaryScores(queryChr, expandedStart, expandedEnd, zoom);
loadedIntervalCache.put(referenceFrame.getName(), interval);

Expand Down
3 changes: 3 additions & 0 deletions src/main/java/org/broad/igv/track/FeatureTrack.java
Expand Up @@ -685,6 +685,9 @@ protected void loadFeatures(final String chr, final int start, final int end, fi
int delta = (end - start) / 2;
int expandedStart = start - delta;
int expandedEnd = end + delta;
if(expandedEnd < 0) {
expandedEnd = Integer.MAX_VALUE; // overflow
}

//Make sure we are only querying within the chromosome we allow for somewhat pathological cases of start
//being negative and end being outside, but only if directly queried. Our expansion should not
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/org/broad/igv/sam/ByteSubarrayTest.java
Expand Up @@ -11,7 +11,7 @@ public void testReverseComplement() {
byte [] forwardSeq = "AAAAATCGAAAA".getBytes();
byte [] expected = "CGAT".getBytes();

ByteSubarray subarray = new ByteSubarray(forwardSeq, 4, 4);
ByteSubarray subarray = new ByteSubarray(forwardSeq, 4, 4, (byte) 0);
ByteSubarray reverse = AlignmentUtils.reverseComplementCopy(subarray);
for(int i=0; i<4; i++) {
byte b = reverse.getByte(i);
Expand Down

0 comments on commit 40b16d0

Please sign in to comment.