diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-09-09 12:19:19 +0000 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-09-09 12:19:19 +0000 |
commit | a6cef4c7ae198292e4b41e4862be6c02b05c6590 (patch) | |
tree | 490ca48940ddb0d2d12448390405fe258aecdbfd | |
parent | 20023071f6543e8f027a1c5b17f86361dd7f6fff (diff) |
Fix problem in vfprintf when assertion are enabled.
Here follow the output of my analysis:
__stdio_fwrite expects at least 1 bytes. fputs_unlocked(S,F) calls
fwrite_unlocked and this calls __stdio_fwrite only if bytes to be
written are > 0, otherwise simply returs 0 (that is correct).
During the parsing of format spec it could happen that __stdio_fwrite
is called passing an empty string and with assertion enabled it will abort.
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
-rw-r--r-- | libc/stdio/_vfprintf.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/libc/stdio/_vfprintf.c b/libc/stdio/_vfprintf.c index 2b642fc35..61a730d75 100644 --- a/libc/stdio/_vfprintf.c +++ b/libc/stdio/_vfprintf.c @@ -1212,8 +1212,7 @@ static size_t _charpad(FILE * __restrict stream, int padchar, size_t numpad); #define OUTNSTR _outnstr #define STRLEN strlen #define _PPFS_init _ppfs_init -/* Pulls in fseek: #define OUTPUT(F,S) fputs_unlocked(S,F) */ -#define OUTPUT(F,S) __stdio_fwrite((const unsigned char *)(S),strlen(S),(F)) +#define OUTPUT(F,S) fputs_unlocked(S,F) /* #define _outnstr(stream, string, len) __stdio_fwrite(string, len, stream) */ #define _outnstr(stream, string, len) ((len > 0) ? __stdio_fwrite(string, len, stream) : 0) #define FP_OUT _fp_out_narrow |