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