# V6130. Integer overflow in arithmetic expression.

The analyzer has detected an arithmetic operation that may result in an integer overflow.

The example:

    private static long parseHumanLong(String str) {
        char tail = str.charAt(str.length() - 1);
        long base = 1;
        switch (tail) {
            case 't':
                base *= 1000 * 1000 * 1000 * 1000;
                break;
            case 'b':
                base *= 1000 * 1000 * 1000;
                break;
            case 'm':
                base *= 1000 * 1000;
                break;
            case 'k':
                base *= 1000;
                break;
            default:
        }
        if (base != 1) {
            str = str.substring(0, str.length() - 1);
        }
        return Long.parseLong(str) * base;
    }

This method reads numbers and converts their suffixes to:

- `t` – trillion;
- `b` – billion;
- `m` – million;
- `k` – thousand.

If the `1m` string is passed to the method, it is expected to be converted to the `long` variable with the `1_000_000` value.

When calculating trillions in the `1000 * 1000 * 1000 * 1000` expression, the multiplication is performed within the `int` range, but the resulting number exceeds the maximum value for the `int` type. This results in the overflow and incorrect result.

To evaluate the expression correctly, explicitly specify the `Long` type for it.

    base *= 1000L * 1000 * 1000 * 1000;

This diagnostic is classified as:

CWE-190 CERT-NUM00-J