Integer overflow or underflow
What it does
Checks for integer arithmetic operations which could overflow or panic.
Specifically, checks for any operators (+
, -
, *
, <<
, etc) which are capable
of overflowing according to the Rust
Reference,
or which can panic (/
, %
). No bounds analysis or sophisticated reasoning is
attempted.
Why is this bad?
Integer overflow will trigger a panic in debug builds or will wrap in release mode. Division by zero will cause a panic in either mode. In some applications one wants explicitly checked, wrapping or saturating arithmetic.
Known problems
Example
let a = 0;
let b = a + 1;
Use instead:
let a = 0;
let b = a.checked_add(1).ok_or(Error::OverflowDetected)?;
Implementation
The detector's implementation can be found at this link.