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

Owner: Nobody
Requestors: public [at] khwilliamson.com
Cc:
AdminCc:

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



Date: Fri, 22 Dec 2017 10:41:26 -0700
To: perlbug [...] perl.org
CC: dbook [...] cpan.org
From: Karl Williamson <public [...] khwilliamson.com>
Subject: Array names starting with 'Inf' can be poorly behaved.
Download (untitled) / with headers
text/plain 534b
I am posting this for Dan Book, who is having trouble getting email to perlbug through. The build options and version of perl is immaterial here, except since 5.22. When the warning "Scalar value @arrayname[0] better written as $arrayname[0]" is triggered (any time an array slice is used with only one element), this results in an error if the array's name starts with 'inf'. Code to reproduce: use warnings; my @infasdf; my @x = @infasdf[0]; 1 Error from above code (since 5.22): Cannot printf Inf with 'c' at (IRC) line 3.
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 1.3k
On Fri, 22 Dec 2017 09:41:56 -0800, public@khwilliamson.com wrote: Show quoted text
> I am posting this for Dan Book, who is having trouble getting email to > perlbug through. > > The build options and version of perl is immaterial here, except since 5.22. > > When the warning "Scalar value @arrayname[0] better written as > $arrayname[0]" > is triggered (any time an array slice is used with only one element), > this results > in an error if the array's name starts with 'inf'. Code to reproduce: > > use warnings; > my @infasdf; > my @x = @infasdf[0]; > 1 > > Error from above code (since 5.22): Cannot printf Inf with 'c' at (IRC) > line 3.
$ ../perl.git-copy/Porting/bisect.pl --target=miniperl --start=v5.20.0 --end=v5.22.0 -- ./miniperl -Ilib /tmp/foo ... 3396ed3031889b7a6890cbcb14149feb7f1ed41f is the first bad commit commit 3396ed3031889b7a6890cbcb14149feb7f1ed41f Author: Jarkko Hietaniemi <jhi@iki.fi> Date: Sun Jan 25 12:27:44 2015 -0500 infnan: Simplify inf parsing. Accept anything beginning with /^inf/i, but warn if there's trailing stuff. :100644 100644 66b08834448704597e416e7f3a024b8329245bd0 7819c60d94adac3f7b96b11ed816cc12d57b1a27 M numeric.c :040000 040000 85a647618418ee945da09230ba2a172f26331d0c 5a472ae9721446be7d90ffdfe00bfb555e1c3d07 M t bisect run success That took 1335 seconds. -- Father Chrysostomos
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 1.8k
On Fri, 22 Dec 2017 13:40:33 -0800, sprout wrote: Show quoted text
> On Fri, 22 Dec 2017 09:41:56 -0800, public@khwilliamson.com wrote:
> > I am posting this for Dan Book, who is having trouble getting email > > to > > perlbug through. > > > > The build options and version of perl is immaterial here, except > > since 5.22. > > > > When the warning "Scalar value @arrayname[0] better written as > > $arrayname[0]" > > is triggered (any time an array slice is used with only one element), > > this results > > in an error if the array's name starts with 'inf'. Code to reproduce: > > > > use warnings; > > my @infasdf; > > my @x = @infasdf[0]; > > 1 > > > > Error from above code (since 5.22): Cannot printf Inf with 'c' at > > (IRC) > > line 3.
> > $ ../perl.git-copy/Porting/bisect.pl --target=miniperl --start=v5.20.0 > --end=v5.22.0 -- ./miniperl -Ilib /tmp/foo > ... > 3396ed3031889b7a6890cbcb14149feb7f1ed41f is the first bad commit > commit 3396ed3031889b7a6890cbcb14149feb7f1ed41f > Author: Jarkko Hietaniemi <jhi@iki.fi> > Date: Sun Jan 25 12:27:44 2015 -0500 > > infnan: Simplify inf parsing. > > Accept anything beginning with /^inf/i, > but warn if there's trailing stuff. > > :100644 100644 66b08834448704597e416e7f3a024b8329245bd0 > 7819c60d94adac3f7b96b11ed816cc12d57b1a27 M numeric.c > :040000 040000 85a647618418ee945da09230ba2a172f26331d0c > 5a472ae9721446be7d90ffdfe00bfb555e1c3d07 M t > bisect run success > That took 1335 seconds.
That commit only changed grok_infnan. I don‘t understand why this (from op.c:scalar_slice_warning) calls grok_infnan: if (key) /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */ Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Scalar value @%" SVf "%c%s%c better written as $%" SVf "%c%s%c", SVfARG(name), lbrack, key, rbrack, SVfARG(name), lbrack, key, rbrack); -- Father Chrysostomos
RT-Send-CC: perl5-porters [...] perl.org, jhi [...] iki.fi
Download (untitled) / with headers
text/plain 1022b
On Fri, 22 Dec 2017 17:41:56 GMT, public@khwilliamson.com wrote: Show quoted text
> I am posting this for Dan Book, who is having trouble getting email to > perlbug through. > > The build options and version of perl is immaterial here, except since 5.22. > > When the warning "Scalar value @arrayname[0] better written as > $arrayname[0]" > is triggered (any time an array slice is used with only one element), > this results > in an error if the array's name starts with 'inf'. Code to reproduce: > > use warnings; > my @infasdf; > my @x = @infasdf[0]; > 1 > > Error from above code (since 5.22): Cannot printf Inf with 'c' at (IRC) > line 3.
Bisection points to: ##### 3396ed3031889b7a6890cbcb14149feb7f1ed41f is the first bad commit commit 3396ed3031889b7a6890cbcb14149feb7f1ed41f Author: Jarkko Hietaniemi <jhi@iki.fi> Date: Sun Jan 25 12:27:44 2015 -0500 infnan: Simplify inf parsing. Accept anything beginning with /^inf/i, but warn if there's trailing stuff. ##### -- James E Keenan (jkeenan@cpan.org)
RT-Send-CC: perl5-porters [...] perl.org
On Fri, 22 Dec 2017 14:01:29 -0800, jkeenan wrote: Show quoted text
> On Fri, 22 Dec 2017 17:41:56 GMT, public@khwilliamson.com wrote:
> > I am posting this for Dan Book, who is having trouble getting email > > to > > perlbug through. > > > > The build options and version of perl is immaterial here, except > > since 5.22. > > > > When the warning "Scalar value @arrayname[0] better written as > > $arrayname[0]" > > is triggered (any time an array slice is used with only one element), > > this results > > in an error if the array's name starts with 'inf'. Code to reproduce: > > > > use warnings; > > my @infasdf; > > my @x = @infasdf[0]; > > 1 > > > > Error from above code (since 5.22): Cannot printf Inf with 'c' at > > (IRC) > > line 3.
> > Bisection points to: > > ##### > 3396ed3031889b7a6890cbcb14149feb7f1ed41f is the first bad commit > commit 3396ed3031889b7a6890cbcb14149feb7f1ed41f > Author: Jarkko Hietaniemi <jhi@iki.fi> > Date: Sun Jan 25 12:27:44 2015 -0500 > > infnan: Simplify inf parsing. > > Accept anything beginning with /^inf/i, > but warn if there's trailing stuff. > #####
If I change the array name to @inf, then it points to me: 354b74ae6f54fdd18bcf40fc3afcdaddc8b2ca9d is the first bad commit commit 354b74ae6f54fdd18bcf40fc3afcdaddc8b2ca9d Author: Father Chrysostomos <sprout@cpan.org> Date: Sat Sep 27 06:48:04 2014 -0700 [perl #12285] Fix str vs num inf/nan treatment sprintf, pack and chr were treating 0+"Inf" and "Inf" differently, even though they have the same string and numeric values. pack was also croaking for 0+"Inf" passed to a string format. That commit corrected much wrong logic, but missed one bit. The result was that any time perl’s printf mechanism is called at the C level (not directly from Perl code) with a format containing %s followed by a numeric format, it will croak if the string is ‘inf’. $ ./perl -Ilib -we 'sub in; @{in}' Ambiguous use of @{in} resolved to @in at -e line 1. Useless use of a variable in void context at -e line 1. $ ./perl -Ilib -we 'sub inf; @{inf}' Cannot printf Inf with 'c' at -e line 1. -- Father Chrysostomos
Date: Sat, 23 Dec 2017 09:14:21 +0000
To: perl5-porters [...] perl.org
From: Zefram <zefram [...] fysh.org>
Subject: Re: [perl #132645] Array names starting with 'Inf' can be poorly behaved.
Fixed in commit 049809883fe65af212c1837f94e2256d13de60ac. -zefram
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 361b
On Sat, 23 Dec 2017 01:14:38 -0800, zefram@fysh.org wrote: Show quoted text
> Fixed in commit 049809883fe65af212c1837f94e2256d13de60ac.
You ninjaed me. :-) I think the code is still fragile. The problem is that every other code path checks args for truth. But this one path, added by Jarkko in 540a63d621d, checks argsv for truth instead of !args. -- Father Chrysostomos


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