OSDN Git Service

Fix problem in vfprintf when assertion are enabled.
authorCarmelo Amoroso <carmelo.amoroso@st.com>
Tue, 9 Sep 2008 12:19:19 +0000 (12:19 -0000)
committerCarmelo Amoroso <carmelo.amoroso@st.com>
Tue, 9 Sep 2008 12:19:19 +0000 (12:19 -0000)
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>
libc/stdio/_vfprintf.c

index 2b642fc..61a730d 100644 (file)
@@ -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