From 4fea5868d240fc3354309df8bf6673735a0ab903 Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Tue, 2 Apr 2002 00:36:12 +0000 Subject: Fix an arg promotion handling bug in _do_one_spec for %c reported by Ilguiz Latypov . --- libc/stdio/printf.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'libc/stdio/printf.c') diff --git a/libc/stdio/printf.c b/libc/stdio/printf.c index 5bdec7ae4..efacc6bee 100644 --- a/libc/stdio/printf.c +++ b/libc/stdio/printf.c @@ -31,6 +31,13 @@ * * ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION! */ +/* 4-01-2002 + * Initialize thread locks for fake files in vsnprintf and vdprintf. + * reported by Erik Andersen (andersen@codepoet.com) + * Fix an arg promotion handling bug in _do_one_spec for %c. + * reported by Ilguiz Latypov + */ + #define _ISOC99_SOURCE /* for ULLONG primarily... */ #define _GNU_SOURCE @@ -1074,7 +1081,7 @@ int _do_one_spec(FILE * __restrict stream, register ppfs_t *ppfs, int *count) } #endif { - register char *s; + register char *s; /* TODO: Should s be unsigned char * ? */ if (ppfs->conv_num == CONV_n) { _store_inttype(*(void **)*argptr, @@ -1172,7 +1179,7 @@ int _do_one_spec(FILE * __restrict stream, register ppfs_t *ppfs, int *count) } } else { /* char */ s = (char *) buf; - *s = *((const char *) *argptr); + *s = (unsigned char)(*((const int *) *argptr)); s[1] = 0; slen = 1; } -- cgit v1.2.3