[LCP]Address out of bounds error on Linux 7.3

Paul Gearon pag at pisoftware.com
Wed Aug 20 09:02:02 UTC 2003


Ajay Aggarwal wrote:
> typedef struct {
>   char* relative_link;
>   char* keys[MAX_KEYS];
> } stack_url;

<snip>

>       /* Lock Mutex put here */
>       for(myurl = wib_urls; myurl->relative_link != NULL; myurl++)
>       {
>         fprintf(stderr,"URL /%s\n",myurl->relative_link);
>         for(kp = (myurl->keys); *kp != NULL; kp++  )
>         {
>            fprintf( stderr, "     %s \n", *kp );        ----------- FAILING ON THIS LINE AFTER FEW ITERATIONS

Just following up on emails given by others, I'd suggest that there's a 
bug in your code that SunOS isn't showing up, but Linux is.  Electric 
fence would certainly help, since kp would appear to be incrementing 
itself out of bounds.

You inner loop here is relying on the last keys item being null.  This 
appears not to be the case.  To start with I'd put in an assertion such as:
   assert(kp - myurl->keys < MAX_KEYS);
I suspect that this will fail at some point.

The NULL you're expecting to find might be disappearing for several 
reasons.  Firstly, some other part of the code could have erroneously 
written out of bounds and overwritten it.  Secondly, another thread may 
have come in and changed the array of keys before you got to the null 
(the difference in the Linux and SunOS schedulers might be the reason 
the bug doesn't show up on SunOS).  There are numerous other reasons as 
well, but I'd probably look for these first.

-- 
Regards,
Paul Gearon

Software Engineer                Telephone:   +61 7 3876 2188
Plugged In Software              Fax:         +61 7 3876 4899
http://www.PIsoftware.com        PGP Key available via finger

Catapultam habeo. Nisi pecuniam omnem mihi dabis, ad caput tuum saxum
immane mittam.
(Translation from latin: "I have a catapult. Give me all the money,
or I will fling an enormous rock at your head.")





More information about the linuxCprogramming mailing list