Package: dash
Version: 0.5.7-4+b1
Severity: normal
Tags: upstream patch
Dear Maintainer,
Dash doesn't notice when a format string has digits following a * width
specifier.
$ printf "%*0s" 1 2
%10s
The output depends on the runtime library.
I made a quick patch that seems to handle this case, but I haven't checked it
thoroughly.
-- System Information:
Debian Release: 8.0
APT prefers testing
APT policy: (990, 'testing'), (10, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.16.0-4-amd64 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages dash depends on:
ii debianutils 4.4+b1
ii dpkg 1.17.24
ii libc6 2.19-15
dash recommends no packages.
dash suggests no packages.
-- debconf information:
* dash/sh: true
*** /home/ptbrown/Documents/src/dash-0.5.8/bug-printf-format.diff
--- src/bltin/printf.c.orig 2015-03-02 23:06:37.574684472 -0500
+++ src/bltin/printf.c 2015-03-02 23:10:09.167733706 -0500
@@ -131,17 +131,20 @@
/* skip to field width */
fmt += strspn(fmt, SKIP1);
- if (*fmt == '*')
+ if (*fmt == '*') {
*param++ = getintmax();
-
- /* skip to possible '.', get following precision */
- fmt += strspn(fmt, SKIP2);
- if (*fmt == '.')
++fmt;
- if (*fmt == '*')
- *param++ = getintmax();
-
- fmt += strspn(fmt, SKIP2);
+ } else
+ /* skip to possible '.', get following precision */
+ fmt += strspn(fmt, SKIP2);
+ if (*fmt == '.') {
+ ++fmt;
+ if (*fmt == '*') {
+ *param++ = getintmax();
+ ++fmt;
+ } else
+ fmt += strspn(fmt, SKIP2);
+ }
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]