]> Savannah Git Hosting - gnulib.git/commitdiff
vasnprintf: Fix potentially wrong zero-padding.
authorBruno Haible <bruno@clisp.org>
Wed, 22 Mar 2023 21:42:58 +0000 (22:42 +0100)
committerBruno Haible <bruno@clisp.org>
Wed, 22 Mar 2023 21:52:36 +0000 (22:52 +0100)
* lib/vasnprintf.c (VASNPRINTF): Fix zero-padding when the result starts
with a prefix "0x" or "0b".

ChangeLog
lib/vasnprintf.c

index 3eeafa854d13d31f0688a9e477958c11c0404495..f99842cdd67e6c22d7c60f9032524703d640583f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2023-03-19  Bruno Haible  <bruno@clisp.org>
+
+       vasnprintf: Fix potentially wrong zero-padding.
+       * lib/vasnprintf.c (VASNPRINTF): Fix zero-padding when the result starts
+       with a prefix "0x" or "0b".
+
 2023-03-19  Paul Eggert  <eggert@cs.ucla.edu>
 
        test-pselect, test-select: use different ports
index 2280e9e71d4f6cba1e07295fa3d56f56d69774d2..ad61dbba92e563fffebfbb1665d0f6b797ec7450 100644 (file)
@@ -5596,6 +5596,22 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
                                   if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z')
                                       || (*pad_ptr >= 'a' && *pad_ptr <= 'z'))
                                     pad_ptr = NULL;
+                                  else
+                                    /* Do the zero-padding after the "0x" or
+                                       "0b" prefix, not before.  */
+                                    if (p - rp >= 2
+                                        && *rp == '0'
+                                        && (((dp->conversion == 'a'
+                                              || dp->conversion == 'x')
+                                             && rp[1] == 'x')
+                                            || ((dp->conversion == 'A'
+                                                 || dp->conversion == 'X')
+                                                && rp[1] == 'X')
+                                            || (dp->conversion == 'b'
+                                                && rp[1] == 'b')
+                                            || (dp->conversion == 'B'
+                                                && rp[1] == 'B')))
+                                      pad_ptr += 2;
                                 }
                               /* The generated string now extends from rp to p,
                                  with the zero padding insertion point being at