The analyzer detected a potentially infinite loop with its exit condition depending on a variable whose value never changes between iterations.
Consider the following example:
int Do(int x);
....
int n = Foo();
int x = 0;
while (x < n)
{
Do(x);
}
The loop's exit condition depends on variable x whose value will always be zero, so the x < n check (if n > 0) will always evaluate to true, causing an infinite loop.
A correct version of this code:
int Do(int x);
....
int n = Foo();
int x = 0;
while (x < n)
{
x = Do(x);
}
Here is another example where the loop exit condition depends on a variable whose value, in its turn, changes depending on other variables that never change inside the loop. Suppose we have the following method:
int Foo(int a)
{
int j = 0;
while (true)
{
if (a >= 32)
{
return j * a;
}
if (j == 10)
{
j = 0;
}
j++;
}
}
The loop's exit condition depends on the a parameter. If a does not pass the a >= 32 check, the loop will become infinite, as the value of a does not change between iterations.
This is one of the ways to fix this code:
int Foo(int a)
{
int j = 0;
while (true)
{
if (a >= 32)
{
return j * a;
}
if (j == 10)
{
j = 0;
a++; // <=
}
j++;
}
}
In the fixed version, the local variable j controls how the a parameter's value changes.
This diagnostic rule is classified as:
Was this page helpful?