-
Notifications
You must be signed in to change notification settings - Fork 558
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
open $fh, ">", \*glob causes SEGV #10583
Comments
From @cpansproutOops. I sent this first to p5p instead of perlbug! The segmentation violation actually happens when the glob is stringified, and only if the $fh has been printed to. This crashes as of perl5.10.0: $ perl5.8.9 -le' open my $fh, ">", \*STDOUT; print $fh "hello"; print *STDOUT' I believe it was change 22315/4ce457a648 that caused this. A patch is forthcoming. Flags: Site configuration information for perl 5.13.4: Configured by sprout at Fri Aug 20 23:24:53 PDT 2010. Summary of my perl5 (revision 5 version 13 subversion 4 patch v5.13.4-16-g16c9153) configuration: Locally applied patches: @INC for perl 5.13.4: Environment for perl 5.13.4: |
From @cpansproutOn Aug 29, 2010, at 1:25 PM, Father Chrysostomos wrote:
Here it is. |
From @cpansproutFrom: Father Chrysostomos <sprout@cpan.org> [perl #77492] open $fh, ">", \*glob causes SEGV PerlIO_layer_from_ref must not treat a real glob as a scalar. This Inline Patchdiff -Nup blead/perlio.c blead-fh-segv/perlio.c
--- blead/perlio.c 2010-08-18 14:37:10.000000000 -0700
+++ blead-fh-segv/perlio.c 2010-08-28 17:18:51.000000000 -0700
@@ -1449,7 +1449,7 @@ PerlIO_layer_from_ref(pTHX_ SV *sv)
/*
* For any scalar type load the handler which is bundled with perl
*/
- if (SvTYPE(sv) < SVt_PVAV) {
+ if (SvTYPE(sv) < SVt_PVAV && !isGV_with_GP(sv)) {
PerlIO_funcs *f = PerlIO_find_layer(aTHX_ STR_WITH_LEN("scalar"), 1);
/* This isn't supposed to happen, since PerlIO::scalar is core,
* but could happen anyway in smaller installs or with PAR */
diff -Nurp blead/t/io/open.t blead-fh-segv/t/io/open.t
--- blead/t/io/open.t 2010-04-13 03:07:10.000000000 -0700
+++ blead-fh-segv/t/io/open.t 2010-08-28 17:49:02.000000000 -0700
@@ -10,7 +10,7 @@ $| = 1;
use warnings;
use Config;
-plan tests => 109;
+plan tests => 110;
my $Perl = which_perl();
@@ -324,3 +324,16 @@ like($@, qr/Modification of a read-only
ok( open(my $f, '-|', $p), 'open -| magic');
}
+
+# [perl #77492] Crash when stringifying a glob, a reference to which has
+# been opened and written to.
+fresh_perl_is(
+ '
+ open my $fh, ">", \*STDOUT;
+ print $fh "hello";
+ "".*STDOUT;
+ print "ok";
+ unlink \*STDOUT;
+ ',
+ 'ok', { stderr => 1 },
+ '[perl #77492]: open $fh, ">", \*glob causes SEGV'); |
From @raflFather Chrysostomos <sprout@cpan.org> writes:
Thanks! Applied as 10cea94. |
The RT System itself - Status changed from 'new' to 'open' |
@rafl - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#77492 (status was 'resolved')
Searchable as RT77492$
The text was updated successfully, but these errors were encountered: