← 返回首页
Uncontrolled data in arithmetic expression — CodeQL query help documentation CodeQL docs
CodeQL documentation
CodeQL resources

Uncontrolled data in arithmetic expression

ID: java/uncontrolled-arithmetic Kind: path-problem Security severity: 8.6 Severity: warning Precision: medium Tags: - security - external/cwe/cwe-190 - external/cwe/cwe-191 Query suites: - java-security-extended.qls - java-security-and-quality.qls

Click to see the query in the CodeQL repository

Performing calculations on uncontrolled data can result in integer overflows unless the input is validated.

If the data is not under your control, and can take extremely large values, even arithmetic operations that would usually result in a small change in magnitude may result in overflows.

Recommendation

Always guard against overflow in arithmetic operations on uncontrolled data by doing one of the following:

Example

In this example, a random integer is generated. Because the value is not controlled by the programmer, it could be extremely large. Performing arithmetic operations on this value could therefore cause an overflow. To avoid this happening, the example shows how to perform a check before performing a multiplication.

class Test { public static void main(String[] args) { { int data = (new java.security.SecureRandom()).nextInt(); // BAD: may overflow if data is large int scaled = data * 10; // ... // GOOD: use a guard to ensure no overflows occur int scaled2; if (data < Integer.MAX_VALUE/10) scaled2 = data * 10; else scaled2 = Integer.MAX_VALUE; } } }

References