]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* stdio-common/vfprintf.c (process_string_arg): Optimize
authorUlrich Drepper <drepper@redhat.com>
Mon, 7 May 2007 03:44:48 +0000 (03:44 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 7 May 2007 03:44:48 +0000 (03:44 +0000)
ridiculous precision in wide char code printing multi-byte string.
Reported by Jim Meyering <jim@meyering.net>.

ChangeLog
stdio-common/vfprintf.c

index ea904651d7ec3e9e9ced097e95a03dc5ddf8724a..2fe96203425ab0fc17334d5d9697e03358dc922c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2007-05-06  Ulrich Drepper  <drepper@redhat.com>
 
+       * stdio-common/vfprintf.c (process_string_arg): Optimize
+       ridiculous precision in wide char code printing multi-byte string.
+       Reported by Jim Meyering <jim@meyering.net>.
+
        [BZ #4131]
        * elf/dl-addr.c (_dl_addr): Compare address with actual segment
        boundaries to work around systems with overlapping binary loading.
index 4f0d971c55bc301a968ae38f7e85d25408cab349..20638ad1fd39acabe03949462c11136a1a4aaba5 100644 (file)
@@ -1026,10 +1026,11 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
            const char *mbs = (const char *) string;                          \
            mbstate_t mbstate;                                                \
                                                                              \
-           len = prec != -1 ? (size_t) prec : strlen (mbs);                  \
+           len = prec != -1 ? __strnlen (mbs, (size_t) prec) : strlen (mbs); \
                                                                              \
            /* Allocate dynamically an array which definitely is long         \
-              enough for the wide character version.  */                     \
+              enough for the wide character version.  Each byte in the       \
+              multi-byte string can produce at most one wide character.  */  \
            if (__libc_use_alloca (len * sizeof (wchar_t)))                   \
              string = (CHAR_T *) alloca (len * sizeof (wchar_t));            \
            else if ((string = (CHAR_T *) malloc (len * sizeof (wchar_t)))    \