[PATCH] Fix 'array subscript is above array bounds' warning in res_send.c
Ondřej Bílka
neleai@seznam.cz
Tue Dec 16 22:08:00 GMT 2014
On Tue, Dec 16, 2014 at 11:12:24AM -0200, Adhemerval Zanella wrote:
> On 16-12-2014 11:05, Siddhesh Poyarekar wrote:
> > On Tue, Dec 16, 2014 at 10:59:10AM -0200, Adhemerval Zanella wrote:
> >> My understanding is to not shadow possible compiler issues with unrequired
> >> code.
> > I don't think this is a compiler issue since I don't think the
> > compiler will ever be able to evaluate that the range for the nscounts
> > will be limited to MAXNS. In fact, given the wide usage of nscount
> > within the code, a bug could technically send the nscounts beyond
> > MAXNS.
> >
> > Siddhesh
>
> 426 if (statp->nscount > EXT(statp).nscount)
> 427 for (n = EXT(statp).nscount, ns = 0;
> 428 n < statp->nscount; n++) {
> 429 while (ns < MAXNS
> 430 && EXT(statp).nsmap[ns] != MAXNS)
> 431 ns++;
> 432 if (ns >= MAXNS)
> 433 break;
> 434 EXT(statp).nsmap[ns] = n;
> 435 map[n] = ns++;
> 436 }
>
> In this loop 'ns' is initialized to '0' and updated on a simple while with
> 2 constraints. Someone with more compiler background could correct me, but
> I don't think this is really hard to compile evaluate that will fall
> in 0 <= ns < MAXNS in all cases.
Something is fishy here as compile should detect that in range
propagation pass.
If you are not sure you could always check if it optimizes simpler code.
And my gcc-4.9.1-2 indeed simplifies this to zero, Siddhesh could you
check it too?
int foo (int x)
{
int i;
for (i=0; i < 1000000; i++)
{
if (i > 1000000)
return 1;
}
return 0;
}
More information about the Libc-alpha
mailing list