Skip to content

printf %a botches 0 flag for negative values #15505

Description

@p5pRT

Migrated from rt.perl.org#128893 (status was 'resolved')

Searchable as RT128893$

Activity

  1. p5pRT commented on Aug 10, 2016

    @p5pRT
    Author

    From zefram@fysh.org

    Created by zefram@fysh.org

    $ perl -lwe 'printf "%020a\n", $_ for 1.5, -1.5'
    0x0000000000001.8p+0
    -000000000000x1.8p+0

    The latter has the zero padding in the wrong place. It should always go
    after the "0x", where it would be legal in a literal on input. The same
    fault happens not just for negative values, but in any situation where
    a sign character is being emitted​:

    $ perl -lwe 'printf $_, 1.5 for "%+020a\n", "% 020a\n"'
    +000000000000x1.8p+0
    000000000000x1.8p+0

    Perl Info
    
    Flags:
        category=core
        severity=low
    
    Site configuration information for perl 5.24.0:
    
    Configured by zefram at Mon May  9 19:42:55 BST 2016.
    
    Summary of my perl5 (revision 5 version 24 subversion 0) configuration:
       
      Platform:
        osname=linux, osvers=3.16.0-4-amd64, archname=x86_64-linux-thread-multi
        uname='linux barba.rous.org 3.16.0-4-amd64 #1 smp debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 gnulinux '
        config_args='-des -Dprefix=/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52 -Duselargefiles -Dusethreads -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dusedevel -Uversiononly -Ui_db'
        hint=recommended, useposix=true, d_sigaction=define
        useithreads=define, usemultiplicity=define
        use64bitint=define, use64bitall=define, uselongdouble=undef
        usemymalloc=n, bincompat5005=undef
      Compiler:
        cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2',
        optimize='-O2',
        cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'
        ccversion='', gccversion='4.9.2', gccosandvers=''
        intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678, doublekind=3
        d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, longdblkind=3
        ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
        alignbytes=8, prototype=define
      Linker and Libraries:
        ld='cc', ldflags =' -fstack-protector-strong -L/usr/local/lib'
        libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib
        libs=-lpthread -lnsl -ldb -ldl -lm -lcrypt -lutil -lc
        perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
        libc=libc-2.19.so, so=so, useshrplib=true, libperl=libperl.so
        gnulibc_version='2.19'
      Dynamic Linking:
        dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52/lib/5.24.0/x86_64-linux-thread-multi/CORE'
        cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong'
    
    
    
    @INC for perl 5.24.0:
        /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52/lib/site_perl/5.24.0/x86_64-linux-thread-multi
        /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52/lib/site_perl/5.24.0
        /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52/lib/5.24.0/x86_64-linux-thread-multi
        /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52/lib/5.24.0
        .
    
    
    Environment for perl 5.24.0:
        HOME=/home/zefram
        LANG (unset)
        LANGUAGE (unset)
        LD_LIBRARY_PATH (unset)
        LOGDIR (unset)
        PATH=/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52/bin:/home/zefram/usr/perl/util:/home/zefram/pub/x86_64-unknown-linux-gnu/bin:/home/zefram/pub/common/bin:/usr/bin:/bin:/usr/local/bin:/usr/games
        PERL_BADLANG (unset)
        SHELL=/usr/bin/zsh
    
    
  2. p5pRT commented on Dec 13, 2016

    @p5pRT
    Author

    From @jhi

    On Wed, 10 Aug 2016 13​:37​:53 -0700, zefram@​fysh.org wrote​:

    This is a bug report for perl from zefram@​fysh.org,
    generated with the help of perlbug 1.40 running under perl 5.24.0.

    -----------------------------------------------------------------
    [Please describe your issue here]

    $ perl -lwe 'printf "%020a\n", $_ for 1.5, -1.5'
    0x0000000000001.8p+0
    -000000000000x1.8p+0

    I believe https://perl5.git.perl.org/perl.git/commit/be9304 fixed this.

    The latter has the zero padding in the wrong place. It should always
    go
    after the "0x", where it would be legal in a literal on input. The
    same
    fault happens not just for negative values, but in any situation where
    a sign character is being emitted​:

    $ perl -lwe 'printf $_, 1.5 for "%+020a\n", "% 020a\n"'
    +000000000000x1.8p+0
    000000000000x1.8p+0

    [Please do not change anything below this line]
    -----------------------------------------------------------------
    ---
    Flags​:
    category=core
    severity=low
    ---
    Site configuration information for perl 5.24.0​:

    Configured by zefram at Mon May 9 19​:42​:55 BST 2016.

    Summary of my perl5 (revision 5 version 24 subversion 0)
    configuration​:

    Platform​:
    osname=linux, osvers=3.16.0-4-amd64, archname=x86_64-linux-thread-
    multi
    uname='linux barba.rous.org 3.16.0-4-amd64 #1 smp debian 3.16.7-
    ckt11-1+deb8u6 (2015-11-09) x86_64 gnulinux '
    config_args='-des -Dprefix=/home/zefram/usr/perl/perl_install/perl-
    5.24.0-i64-f52 -Duselargefiles -Dusethreads -Uafs -Ud_csh -Uusesfio
    -Uusenm -Duseshrplib -Dusedevel -Uversiononly -Ui_db'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    Compiler​:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-
    aliasing -pipe -fstack-protector-strong -I/usr/local/include
    -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2',
    optimize='-O2',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing
    -pipe -fstack-protector-strong -I/usr/local/include'
    ccversion='', gccversion='4.9.2', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678,
    doublekind=3
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16,
    longdblkind=3
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
    lseeksize=8
    alignbytes=8, prototype=define
    Linker and Libraries​:
    ld='cc', ldflags =' -fstack-protector-strong -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-
    fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu
    /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib
    libs=-lpthread -lnsl -ldb -ldl -lm -lcrypt -lutil -lc
    perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc
    libc=libc-2.19.so, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.19'
    Dynamic Linking​:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E
    -Wl,-rpath,/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-
    f52/lib/5.24.0/x86_64-linux-thread-multi/CORE'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-
    protector-strong'

    ---
    @​INC for perl 5.24.0​:
    /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-
    f52/lib/site_perl/5.24.0/x86_64-linux-thread-multi
    /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-
    f52/lib/site_perl/5.24.0
    /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-
    f52/lib/5.24.0/x86_64-linux-thread-multi
    /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f52/lib/5.24.0
    .

    ---
    Environment for perl 5.24.0​:
    HOME=/home/zefram
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-
    f52/bin​:/home/zefram/usr/perl/util​:/home/zefram/pub/x86_64-unknown-
    linux-
    gnu/bin​:/home/zefram/pub/common/bin​:/usr/bin​:/bin​:/usr/local/bin​:/usr/games
    PERL_BADLANG (unset)
    SHELL=/usr/bin/zsh

  3. p5pRT commented on Dec 13, 2016

    @p5pRT
    Author

    The RT System itself - Status changed from 'new' to 'open'

  4. p5pRT commented on Dec 13, 2016

    @p5pRT
    Author

    @jhi - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions