Skip Menu |
Report information
Id: 132626
Status: pending release
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: wolf-dietrich_moeller [at] t-online.de
Cc:
AdminCc:

Operating System: (no value)
PatchStatus: (no value)
Severity: low
Type: unknown
Perl Version: (no value)
Fixed In: 5.27.1



Date: Wed, 20 Dec 2017 12:56:45 +0100
To: <perlbug [...] perl.org>
Subject: perl5 sprintf: wrong output on format %a
From: Wolf-Dietrich Moeller (Munchen) <wolf-dietrich_moeller [...] t-online.de>
Download (untitled) / with headers
text/plain 3.2k
This is a bug report for perl from wolf-dietrich_moeller@t-online.de, generated with the help of perlbug 1.40 running under perl 5.26.1. ----------------------------------------------------------------- sprintf generates a wrong output for the format "%a". The test program below gives the output lines: 0x1.ep+4 30.000000 3.000000e+001 30 0x1.ep+4 0X1.EP+4 30.000000 30 Line 1 shows the buggy result of "%a". Line 2 shows that under certain combinations of format parameters the bug even extends to the next parameter. ######## test program ######### print sprintf("%a %f %e %g\n",30,30,30,30); print sprintf("%a %e %f %g\n",30,30,30,30); ######## end test program ##### ----------------------------------------------------------------- --- Flags: category=core severity=medium --- Site configuration information for perl 5.26.1: Configured by strawberry-perl at Sat Sep 23 23:10:19 2017. Summary of my perl5 (revision 5 version 26 subversion 1) configuration: Platform: osname=MSWin32 osvers=6.3 archname=MSWin32-x86-multi-thread-64int uname='Win32 strawberry-perl 5.26.1.1 #1 Sat Sep 23 23:07:28 2017 i386' config_args='undef' hint=recommended useposix=true d_sigaction=undef useithreads=define usemultiplicity=define use64bitint=define use64bitall=undef uselongdouble=undef usemymalloc=n default_inc_excludes_dot=define bincompat5005=undef Compiler: cc='gcc' ccflags =' -s -O2 -DWIN32 -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields' optimize='-s -O2' cppflags='-DWIN32' ccversion='' gccversion='7.1.0' gccosandvers='' intsize=4 longsize=4 ptrsize=4 doublesize=8 byteorder=12345678 doublekind=3 d_longlong=define longlongsize=8 d_longdbl=define longdblsize=12 longdblkind=3 ivtype='long long' ivsize=8 nvtype='double' nvsize=8 Off_t='long long' lseeksize=8 alignbytes=8 prototype=define Linker and Libraries: ld='g++' ldflags ='-s -L"C:\Perl\perl\lib\CORE" -L"C:\Perl\c\lib"' libpth=C:\Perl\c\lib C:\Perl\c\i686-w64-mingw32\lib C:\Perl\c\lib\gcc\i686-w64-mingw32\7.1.0 libs= -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 perllibs= -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 libc= so=dll useshrplib=true libperl=libperl526.a gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs dlext=xs.dll d_dlsymun=undef ccdlflags=' ' cccdlflags=' ' lddlflags='-mdll -s -L"C:\Perl\perl\lib\CORE" -L"C:\Perl\c\lib"' --- @INC for perl 5.26.1: C:/Perl/perl/site/lib C:/Perl/perl/vendor/lib C:/Perl/perl/lib --- Environment for perl 5.26.1: HOME (unset) LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=<content Show quoted text
cleared>;C:\Perl\c\bin;C:\Perl\perl\site\bin;C:\Perl\perl\bin
PERL_BADLANG (unset) SHELL (unset)
From: Zefram <zefram [...] fysh.org>
Subject: Re: [perl #132626] perl5 sprintf: wrong output on format %a
Date: Wed, 20 Dec 2017 12:45:00 +0000
To: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 690b
Wolf-Dietrich Moeller wrote: Show quoted text
>print sprintf("%a %f %e %g\n",30,30,30,30); >0x1.ep+4 30.000000 3.000000e+001 30 >Line 1 shows the buggy result of "%a".
That looks correct to me. What output were you expecting for %a? Show quoted text
>print sprintf("%a %e %f %g\n",30,30,30,30); >0x1.ep+4 0X1.EP+4 30.000000 30 >Line 2 shows that under certain combinations of format >parameters the bug even extends to the next parameter.
There's certainly a bug there, with %e producing the wrong output. Apparently that's triggered by coming immediately after %a. But it seems unlikely that this would have anything to do with whatever it is that you perceive to be wrong about the output of %a. -zefram
Date: Thu, 21 Dec 2017 00:04:54 +1100
To: <perl5-porters [...] perl.org>, <bugs-bitbucket [...] rt.perl.org>
From: <sisyphus1 [...] optusnet.com.au>
Subject: Re: [perl #132626] perl5 sprintf: wrong output on format %a
Download (untitled) / with headers
text/plain 1.5k
Show quoted text
-----Original Message----- From: Wolf-Dietrich Moeller (via RT) Sent: Wednesday, December 20, 2017 10:57 PM To: bugs-bitbucket@rt.perl.org Subject: [perl #132626] perl5 sprintf: wrong output on format %a
> # New Ticket Created by Wolf-Dietrich Moeller > # Please include the string: [perl #132626] > # in the subject line of all future correspondence about this issue. > # <URL: https://rt.perl.org/Ticket/Display.html?id=132626 > > > > This is a bug report for perl from wolf-dietrich_moeller@t-online.de, > generated with the help of perlbug 1.40 running under perl 5.26.1. > > > ----------------------------------------------------------------- > sprintf generates a wrong output for the format "%a". > The test program below gives the output lines: > > 0x1.ep+4 30.000000 3.000000e+001 30 > 0x1.ep+4 0X1.EP+4 30.000000 30 > > Line 1 shows the buggy result of "%a". > Line 2 shows that under certain combinations of format > parameters the bug even extends to the next parameter. > > ######## test program ######### > print sprintf("%a %f %e %g\n",30,30,30,30); > print sprintf("%a %e %f %g\n",30,30,30,30); > ######## end test program ##### > -----------------------------------------------------------------
I see the same on Strawberry 5.26.0 (gcc-7.1.0), and on my own mingw-w64 build of 5.26.0 (gcc-7.2.0). However, on my own build of 5.27.6 (gcc-7.2.0), the output of the test program is correct. Since the only difference between my build of 5.26.0 and my build of 5.27.6 is the perl source, I surmise that the perl source has already been patched to fix the bug. Cheers, Rob
Subject: Re: [perl #132626] perl5 sprintf: wrong output on format %a
From: Zefram <zefram [...] fysh.org>
To: perl5-porters [...] perl.org
Date: Wed, 20 Dec 2017 13:08:03 +0000
Download (untitled) / with headers
text/plain 390b
I wrote: Show quoted text
>Wolf-Dietrich Moeller wrote:
>>print sprintf("%a %e %f %g\n",30,30,30,30); >>0x1.ep+4 0X1.EP+4 30.000000 30
> >There's certainly a bug there, with %e producing the wrong output.
This was fixed by commit 5d10f2fcfe8b2a11672351b95a7f374075dd4c67 in Perl 5.27.1. $ perl5.27.1 -we 'print sprintf("%a %e %f %g\n",30,30,30,30)' 0x1.ep+4 3.000000e+01 30.000000 30 -zefram


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org