Skip to main content

DoS unbounded operation

What it does

This detector checks that when using for or while loops, their conditions limit the execution to a constant number of iterations.

Why is this bad?

If the number of iterations is not limited to a specific range, it could potentially cause out of gas exceptions.

Known problems

False positives are to be expected when using variables that can only be set using controlled flows that limit the values within acceptable ranges.

Example

pub fn pay_out(&mut self) {
for i in 0..self.next_payee_ix {
let payee = self.payees.get(&i).unwrap();
self.env().transfer(payee.address, payee.value).unwrap();
}
}

Use instead:

pub fn pay_out(&mut self, payee: u128) {
let payee = self.payees.get(&payee).unwrap();
self.env().transfer(payee.address, payee.value).unwrap();
}

Implementation

The detector's implementation can be found at this link.