[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