# V6131. Casting to a type with a smaller range will result in 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);

        ....
    }

Здесь вычисление `4L * 1024 * 1024 * 1024` равняется 4,294,967,296 (`2^32`), которое после приводится к `int`. Это значение выходит за пределы допустимого диапазона `int` (`[-2^31..2^31-1]`). В результате значение становится 0 вместо ожидаемого максимума.

Чтобы избежать переполнения, в данном случае необходимо использовать тип `long` для всех переменных и параметров, участвующих в вычислениях:

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

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

        ....
    }

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки целочисленного переполнения и некорректного совместного использования знаковых и беззнаковых чисел.

Данная диагностика классифицируется как:

CWE-190 CERT-NUM00-J