mirror of
https://sourceware.org/git/glibc.git
synced 2025-06-06 11:41:02 +03:00
Update.
* 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:
parent
c9ade7e27f
commit
22318b7b13
@ -1,5 +1,10 @@
|
|||||||
1999-08-16 Ulrich Drepper <drepper@cygnus.com>
|
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
|
* wcsmbs/wcsmbsload.c (__wcsmbs_clone_conv): Call
|
||||||
update_conversion_ptrs.
|
update_conversion_ptrs.
|
||||||
Reported by Shinya Hanataka <hanataka@abyss.rim.or.jp>.
|
Reported by Shinya Hanataka <hanataka@abyss.rim.or.jp>.
|
||||||
|
@ -1105,21 +1105,31 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
|||||||
mbstate_t mbstate; \
|
mbstate_t mbstate; \
|
||||||
\
|
\
|
||||||
memset (&mbstate, '\0', sizeof (mbstate_t)); \
|
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) \
|
if (len == (size_t) -1) \
|
||||||
{ \
|
{ \
|
||||||
/* Illegal wide-character string. */ \
|
/* Illegal wide-character string. */ \
|
||||||
done = -1; \
|
done = -1; \
|
||||||
goto all_done; \
|
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) \
|
if ((width -= len) < 0) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user