summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2008-09-09 12:19:19 +0000
committerCarmelo Amoroso <carmelo.amoroso@st.com>2008-09-09 12:19:19 +0000
commita6cef4c7ae198292e4b41e4862be6c02b05c6590 (patch)
tree490ca48940ddb0d2d12448390405fe258aecdbfd
parent20023071f6543e8f027a1c5b17f86361dd7f6fff (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.c3
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