bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: small fix for lib/sh/snprintf.c


From: Petr Sumbera
Subject: Re: small fix for lib/sh/snprintf.c
Date: Fri, 13 Apr 2012 15:18:54 +0200
User-agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.9.2.13) Gecko/20110117 Lightning/1.0b2 Thunderbird/3.1.7

Your change is ok for my original test case. But I have realized that there are several other problems. Please see attached new version of the patch.

Problem 1:
==========

bash -c 'printf "x%-010.0fx\n" 123'
x1230000000x

where it should be:
x123       x

Fixed in chunk #6.

Problem 2:
==========

bash -c 'printf "x%+010.0fx\n" 123'
x000000+123x

where it should be:
x+000000123x

Fixed in chunk #3 (but the problem is there also for other types!).

Problem 3:
==========

bash -c 'printf "x%-+10.0fx\n" 123'
x      +123x

where it should be:
x+123      x

Fixed in chunk #5 and #1.

Problem 4:
==========

bash -c 'printf "%f\n" -123'
-inf

where it should be:
-123.000000

Fixed in chunk #2.

--

Petr

On 04/13/12 02:27 AM, Chet Ramey wrote:
On 4/12/12 12:25 PM, Petr Sumbera wrote:
Hi,

we are running Bash 3.2.38 on Solaris 10 where asprintf() isn't available.
Thus code in snprintf.c is used.

There is a problem with following command:

bash -c 'printf "x%10.0fx\n" 123'
x0000000123x

Where correct output should be:
x       123x

It seems that '0' after '.' enables zero padding. Please see proposed patch
bellow:

--- bash-3.2.48/lib/sh/snprintf.c       Tue Dec 12 12:10:18 2006
+++ bash-3.2.48/lib/sh/snprintf.c       Thu Apr 12 08:55:44 2012
@@ -1277,6 +1277,8 @@
                 data->flags |= PF_ALTFORM;
                 continue;
               case '0':
+               if (data->flags&  PF_DOT)
+                 continue;
                 data->flags |= PF_ZEROPAD;
                 data->pad = '0';
                 continue;

The same code seems to be also in Bash 4.1 so I guess the problem is still
there.

Any comments?

Thanks for the report.  Try this slightly improved patch; yours (and the
original code) doesn't treat a precision specifier beginning with a `0'
correctly.  (And the test has to use `printf -v' to exercise the right
code in bash-4.0 and later.)

Chet


Attachment: snprintf.patch
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]