>:Matthew Dillon writes:
>:>                                         goto match_failure;
>:>                         } else {
>:>                                 p0 = p = va_arg(ap, char *);
>:> -                               while (ccltab[*inp]) {
>:> +                               while (ccltab[(int)(unsigned char)*inp]) {
>:>                                         inr--;
>:>                                         *p++ = *inp++;
>:>                                         if (--width == 0)
>:
>:Just curious.. why do you need the "(int)" cast?
>:
>:-Archie
>
>    Actually, it could very well be that I don't.  I didn't want to spend
>    the time to check to see if the compiler warned on unsigned-char array
>    indexes.  You can change it back if unsigned char array indexes do not
>    produce a warning.

Sloppy thinking.  How would you know if you fixed the bug unless you checked
that you fixed the bug instead of breaking the warning?  The bug was that
on systems with signed chars, *inp gave negative array indexes if the
caller passes a format string with negative characters in certain positions.
There are still lots of related isfoo(*inp) bugs.  All these bugs are more
serious in the userland.

Bruce

To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-current" in the body of the message

Reply via email to