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

  void foo(unsigned char v);
  void test(unsigned long data){

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.