* stdio-common/vfprintf.c (process_string_arg) [printf]: Handle
	possibly unterminated strings for %ls when a precision is
	specified.
	Patch by Akira YOSHIYAMA <yosshy@tkf.att.ne.jp>.
This commit is contained in:
Ulrich Drepper 1999-08-17 01:06:30 +00:00
parent c9ade7e27f
commit 22318b7b13
2 changed files with 24 additions and 9 deletions

View File

@ -1,5 +1,10 @@
1999-08-16 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfprintf.c (process_string_arg) [printf]: Handle
possibly unterminated strings for %ls when a precision is
specified.
Patch by Akira YOSHIYAMA <yosshy@tkf.att.ne.jp>.
* wcsmbs/wcsmbsload.c (__wcsmbs_clone_conv): Call
update_conversion_ptrs.
Reported by Shinya Hanataka <hanataka@abyss.rim.or.jp>.

View File

@ -1105,21 +1105,31 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
mbstate_t mbstate; \
\
memset (&mbstate, '\0', sizeof (mbstate_t)); \
len = __wcsrtombs (NULL, &s2, 0, &mbstate); \
\
if (prec > 0) \
{ \
/* The string `s2' might not be NUL terminated. */ \
string = (char *) alloca (prec + 1); \
len = __wcsrtombs (string, &s2, prec + 1, &mbstate); \
} \
else \
{ \
len = __wcsrtombs (NULL, &s2, 0, &mbstate); \
if (len != (size_t) -1) \
{ \
assert (__mbsinit (&mbstate)); \
s2 = (const wchar_t *) string; \
string = (char *) alloca (len + 1); \
(void) __wcsrtombs (string, &s2, len + 1, &mbstate); \
} \
} \
\
if (len == (size_t) -1) \
{ \
/* Illegal wide-character string. */ \
done = -1; \
goto all_done; \
} \
\
assert (__mbsinit (&mbstate)); \
s2 = (const wchar_t *) string; \
string = alloca (len + 1); \
if (prec > 0 && prec < len) \
len = __wcsrtombs (string, &s2, prec, &mbstate); \
else \
(void) __wcsrtombs (string, &s2, len + 1, &mbstate); \
} \
\
if ((width -= len) < 0) \