Browse Source

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>

Carmelo Amoroso 17 years ago
parent
commit
a6cef4c7ae
1 changed files with 1 additions and 2 deletions
  1. 1 2
      libc/stdio/_vfprintf.c

+ 1 - 2
libc/stdio/_vfprintf.c

@@ -1212,8 +1212,7 @@ static size_t _charpad(FILE * __restrict stream, int padchar, size_t numpad);
 #define OUTNSTR _outnstr
 #define OUTNSTR _outnstr
 #define STRLEN  strlen
 #define STRLEN  strlen
 #define _PPFS_init _ppfs_init
 #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)	__stdio_fwrite(string, len, stream) */
 #define _outnstr(stream, string, len)	((len > 0) ? __stdio_fwrite(string, len, stream) : 0)
 #define _outnstr(stream, string, len)	((len > 0) ? __stdio_fwrite(string, len, stream) : 0)
 #define FP_OUT _fp_out_narrow
 #define FP_OUT _fp_out_narrow