summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2011-12-25 00:16:21 -0800
committerFather Chrysostomos <sprout@cpan.org>2011-12-25 00:16:21 -0800
commit3825652ddfd2e6e7a10980ece6f9a732388cbecf (patch)
tree97973ad16215f8ddf0bc57ef0bbae24567349241
parent7f9aa7d32945332aeb1251c905307d22abfd4da5 (diff)
downloadperl-3825652ddfd2e6e7a10980ece6f9a732388cbecf.tar.gz
PerlIO::get_layers: Treat numbers as strings
PerlIO::get_layers should not be ignoring an argument like 12, but treating "12" (the string) as a filehandle, as those are both the same value. It’s an instance of the string/num bug, which is a bit like the Unicode Bug. This commit takes the conservative approach of expanding it to flat scalars in general, but not references (in case we decide to do something interesting later on, even though I think that would be a bad idea).
-rw-r--r--t/io/layers.t6
-rw-r--r--universal.c2
2 files changed, 6 insertions, 2 deletions
diff --git a/t/io/layers.t b/t/io/layers.t
index 45afd7be20..86d171ce2b 100644
--- a/t/io/layers.t
+++ b/t/io/layers.t
@@ -35,7 +35,7 @@ if (${^UNICODE} & 1) {
} else {
$UTF8_STDIN = 0;
}
-my $NTEST = 59 - (($DOSISH || !$FASTSTDIO) ? 7 : 0) - ($DOSISH ? 7 : 0)
+my $NTEST = 60 - (($DOSISH || !$FASTSTDIO) ? 7 : 0) - ($DOSISH ? 7 : 0)
+ $UTF8_STDIN;
sub PerlIO::F_UTF8 () { 0x00008000 } # from perliol.h
@@ -246,4 +246,8 @@ EOT
$t = '';
$f = 0; PerlIO::get_layers $t;
is $f, 1, '1 fetch on tied string';
+
+ # No distinction between nums and strings
+ open "12", "<:crlf", "test.pl" or die "$0 cannot open test.pl: $!";
+ ok PerlIO::get_layers(12), 'str/num arguments are treated identically';
}
diff --git a/universal.c b/universal.c
index 36800b8196..9d743abaaa 100644
--- a/universal.c
+++ b/universal.c
@@ -1006,7 +1006,7 @@ XS(XS_PerlIO_get_layers)
sv = POPs;
gv = MAYBE_DEREF_GV(sv);
- if (!gv && SvPOKp(sv))
+ if (!gv && !SvROK(sv))
gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
if (gv && (io = GvIO(gv))) {