develooper Front page | perl.perl5.porters | Postings from August 2013

[perl #119181] Bug report: infinite loop in `perl -c -e "e's a cm..\"frus..\""`

Thread Previous | Thread Next
From:
Brian Fraser via RT
Date:
August 6, 2013 23:49
Subject:
[perl #119181] Bug report: infinite loop in `perl -c -e "e's a cm..\"frus..\""`
Message ID:
rt-3.6.HEAD-2552-1375832939-1959.119181-15-0@perl.org
On Tue Aug 06 12:26:27 2013, ericp wrote:
> This is a bug report for perl from ericp@activestate.com,
> generated with the help of perlbug 1.39 running under perl 5.14.2.
> 
> 
> -----------------------------------------------------------------
> [Please describe your issue here]
> 
> Running `perl X.pl` or `perl -c X.pl` never halts, where
> X.pl contains the following single line:
> 
> e's a cm.."frus.."
> 
> 
> 
> [Please do not change anything below this line]
> -----------------------------------------------------------------
> ---
> Flags:
>      category=core
>      severity=low
> ---
> Site configuration information for perl 5.14.2:
> 
> Configured by Debian Project at Tue Nov 27 00:34:23 UTC 2012.
> 
> Summary of my perl5 (revision 5 version 14 subversion 2)
>    configuration:
> 
>    Platform:
>      osname=linux, osvers=2.6.42-32-generic, archname=x86_64-linux-
>    gnu-thread-multi
>      uname='linux allspice 2.6.42-32-generic #51-ubuntu smp wed sep 26
>    21:33:09 utc 2012 x86_64 x86_64 x86_64 gnulinux '
>      config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
>    -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr
>    -Dprivlib=/usr/share/perl/5.14 -Darchlib=/usr/lib/perl/5.14
>    -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
>    -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
>    -Dsitelib=/usr/local/share/perl/5.14.2
>    -Dsitearch=/usr/local/lib/perl/5.14.2 -Dman1dir=/usr/share/man/man1
>    -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
>    -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1
>    -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh
>    -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g
>    -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.14.2 -des'
>      hint=recommended, useposix=true, d_sigaction=define
>      useithreads=define, usemultiplicity=define
>      useperlio=define, d_sfio=undef, uselargefiles=define,
>    usesocks=undef
>      use64bitint=define, use64bitall=define, uselongdouble=undef
>      usemymalloc=n, bincompat5005=undef
>    Compiler:
>      cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
>    -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include
>    -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
>      optimize='-O2 -g',
>      cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
>    -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
>      ccversion='', gccversion='4.6.3', gccosandvers=''
>      intsize=4, longsize=8, ptrsize=8, doublesize=8,
>    byteorder=12345678
>      d_longlong=define, longlongsize=8, d_longdbl=define,
>    longdblsize=16
>      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 -L/usr/local/lib'
>      libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib
>    /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib
>      libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
>      perllibs=-ldl -lm -lpthread -lc -lcrypt
>      libc=, so=so, useshrplib=true, libperl=libperl.so.5.14.2
>      gnulibc_version='2.15'
>    Dynamic Linking:
>      dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
>      cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib
>    -fstack-protector'
> 
> Locally applied patches:
> 
> 
> ---
> @INC for perl 5.14.2:
>      /etc/perl
>      /usr/local/lib/perl/5.14.2
>      /usr/local/share/perl/5.14.2
>      /usr/lib/perl5
>      /usr/share/perl5
>      /usr/lib/perl/5.14
>      /usr/share/perl/5.14
>      /usr/local/lib/site_perl
>      .
> 
> ---
> Environment for perl 5.14.2:
>      HOME=/home/ericp
>      LANG=en_CA.UTF-8
>      LANGUAGE=en_CA:en
>      LD_LIBRARY_PATH (unset)
>      LOGDIR (unset)
>      PATH=/home/ericp/.local/bin:/home/ericp/opt/node-
>    0.8.0/bin:/home/ericp/opt/ActivePython-
>   
2.7.2.5/bin:/home/ericp/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/ericp/svn/apps/komodo/util/black:/home/ericp/opt/ActivePython-
>    3.2.2.3/bin:/home/ericp/opt/ActiveTcl8.5.12.0.296033/bin
>      PERL_BADLANG (unset)
>      SHELL=/bin/bash

This isn't really an infinite loop, it's just going to take a long, long
time before it finishes. The "e's a" is a red herring (it's actually
calling the method e::s on 'a'), the important bit is the cm.."frus..",
which is creating a list of strings from "cm" to "zzzzzz" using the
magic autoincrement.

This might be easier to see if you "deparse" it:

a->e::s( "cm".."frus.." );

Whose non-weird cousin might look like this:

Alphabet->fill( "a".."z" );

This is similar to other constructs that take a long time, like 1..1e10
or (1..100) x 1e8

Even though the autoincrement will try reaching "frus.." and fail, since
it'll always go through a-z and never use a period, it's not an infinite
loop because after "zzzzzz" it'll get "aaaaaaa", which is longer than
the original string, and stop there.

So I think this ticket can be closed, since it's not really a bug (just
a shoot-your-own-foot, as it were).

--hugmeir


---
via perlbug:  queue: perl5 status: new
https://rt.perl.org:443/rt3/Ticket/Display.html?id=119181

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About