Changeset 36198 in osm


Ignore:
Timestamp:
2023-12-27T16:17:21+01:00 (5 months ago)
Author:
taylor.smock
Message:

See #23367: Give some indication when an integer overflow occurs

In this case, we are throwing an ArithmeticException when an overflow occurs.

Location:
applications/viewer/jmapviewer
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/TileRange.java

    r33285 r36198  
    4848     * Returns size
    4949     * @return size
     50     * @throws ArithmeticException – if the result overflows an int (see {@link Math#multiplyExact(int, int)})
    5051     */
    51     public int size() {
     52    public int size() throws ArithmeticException {
    5253        int xSpan = maxX - minX + 1;
    5354        int ySpan = maxY - minY + 1;
    54         return xSpan * ySpan;
     55        return Math.multiplyExact(xSpan, ySpan);
    5556    }
    5657}
  • applications/viewer/jmapviewer/test/org/openstreetmap/gui/jmapviewer/TileRangeTest.java

    r36140 r36198  
    44
    55import static org.junit.jupiter.api.Assertions.assertEquals;
     6import static org.junit.jupiter.api.Assertions.assertThrows;
    67
    78import org.junit.jupiter.api.Test;
     
    2122                new TileXY(6, 6), 10).size());
    2223    }
     24
     25    /**
     26     * Ensure that something exceptional happens when an integer overflow happens
     27     */
     28    @Test
     29    void testSizeTooLarge() {
     30        final TileRange allZ16 = new TileRange(new TileXY(0, 0), new TileXY(1 << 16, 1 << 16), 16);
     31        assertThrows(ArithmeticException.class, allZ16::size);
     32    }
    2333}
Note: See TracChangeset for help on using the changeset viewer.