InfiniteLoop (Windows Driver CodeQL Query)
Overview
Comparisons between types of different widths in a loop condition can cause the loop to fail to terminate.
Recommendation
Use appropriate types in the loop condition.
Example
In this example, the result of the comparison may result in an infinite loop if the value for argument: a is larger than SHRT_MAX:
void InfiniteLoop(int a)
{
for (short i = 0; i < a; i++) // BUG: infinite loop
{
// ...
}
}
To fix the bug, we are changing the type for the variable i to match the width of a:
void NotInfiniteLoop(int a)
{
for (int i = 0; i < a; i++)
{
// ...
}
}
Additional Details
This query can be found in the Microsoft GitHub CodeQL repository. See the CodeQL and the Static Tools Logo Test page for details on how Windows Driver developers can download and run CodeQL.