Loss of precision during function call

The PRECISION.LOSS checker finds instances in which an implicit cast to a smaller data type during a function call can cause a loss of precision in data.

Vulnerability and risk

Depending on the exact circumstances, this situation is potentially exploitable, for instance if it results in a buffer overflow.

Mitigation and prevention

If the loss of precision cast is intentional, the source of the cast should be masked with an appropriate bitmask. For example:

char c = (i & 0xFF);

Vulnerable code example

1  void foo(unsigned char v);
2  void test(unsigned long data){
3    foo(data);   
4  }

Klocwork flags line 3, in which an unsigned long is converted to an unsigned char.

Related checkers

Security training

Application security training materials provided by Secure Code Warrior.