# V6131. Casting to a type with a smaller range will result in an overflow.

The analyzer has detected that an integer value is cast to a data type with a smaller size, which leads to an overflow. This happens because a source value is outside the valid range of the target type.

The example of such an overflow:

    static final long MAX_CHUNK_SIZE = 4L * 1024 * 1024 * 1024;

    void makeChunks(int fileSize) {
        int chunkSize = Math.min(fileSize, (int) MAX_CHUNK_SIZE);

        ....
    }

The `4L * 1024 * 1024 * 1024` expression equals 4,294,967,296 (`2^32`), which is then cast to `int`. This value exceeds the valid `int` range (`[-2^31..2^31-1]`). As a result, the value becomes 0 instead of the expected maximum.

To avoid the overflow, use the `long` type for all variables and parameters involved in the calculations:

    static final long MAX_CHUNK_SIZE = 4L * 1024 * 1024 * 1024;

    void makeChunks(long fileSize) {
        long chunkSize = Math.min(fileSize, MAX_CHUNK_SIZE);

        ....
    }

This diagnostic is classified as:

CWE-190 CERT-NUM00-J