On Thu, Aug 15, 2013 at 11:34:32AM +0000, Thorsten Glaser wrote:
> sin dixit:
> 
> >On Thu, Aug 15, 2013 at 11:00:11AM +0000, Thorsten Glaser wrote:
> >
> >> >          if(len+1 > *size && !(*p = realloc(*p, len+1)))
>                                                        ^^^^^
> 
> >> >                  eprintf("realloc:");
> >> >
> >> >-         strcpy(&(*p)[len-n], buf);
> >> >+         snprintf(&(*p)[len-n], n+1, "%s", buf);
> >>
> >> Again, I object… you do not calculate the length correctly.
> >> Besides, this looks like a strlcat to me… if not, memcpy
> >> might again be more wise; n+1 doesn’t match with len+1 from above.
> >
> >Will change these to memcpy(), thanks.  However, I don't understand why n + 1
> >is wrong here?
> 
> p is allocated with “len+1” bytes, so “len+1” should show up in
> its size calculations… I admit (len+1-(len-n)) factors out as
> n+1, but let the compiler do that was said recently AFAICT?
> 
> Anyway, this kind of offset magic is prone to produce buffer
> over-/underflows later when other people touch the code.
> Better be explicit: if you want a strcat, use strlcat.

I definitely agree with you.

Thanks,
sin

Reply via email to