]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
2007-05-06 Ulrich Drepper <drepper@redhat.com>
authorJakub Jelinek <jakub@redhat.com>
Thu, 12 Jul 2007 15:21:13 +0000 (15:21 +0000)
committerJakub Jelinek <jakub@redhat.com>
Thu, 12 Jul 2007 15:21:13 +0000 (15:21 +0000)
* 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>.

ChangeLog
stdio-common/vfprintf.c

index 4432d264bab282789c7f7bc7a741074c9a176940..5c48b60fbe643baae7d84b770049767021738915 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +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>.
+
 2007-05-06  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #4465]
index b92d1c4b6469c14ad93002ec15ea0dadfed80d27..1377e3c17edc31d25822a731f1503c5733634af9 100644 (file)
@@ -1025,10 +1025,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)))    \