SvUPGRADE(s->var, SVt_PV);
code = PerlIOBase_pushed(aTHX_ f, mode, Nullsv, tab);
if (!SvOK(s->var) || (PerlIOBase(f)->flags) & PERLIO_F_TRUNCATE)
+ {
+ sv_force_normal(s->var);
SvCUR_set(s->var, 0);
+ }
if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND)
+ {
+ sv_force_normal(s->var);
s->posn = SvCUR(s->var);
+ }
else
s->posn = 0;
SvSETMAGIC(s->var);
SV *sv = s->var;
char *dst;
SvGETMAGIC(sv);
+ sv_force_normal(sv);
if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND) {
dst = SvGROW(sv, SvCUR(sv) + count);
offset = SvCUR(sv);
/*
* For any scalar type load the handler which is bundled with perl
*/
- if (SvTYPE(sv) < SVt_PVAV && !isGV_with_GP(sv)) {
+ if (SvTYPE(sv) < SVt_PVAV && (!isGV_with_GP(sv) || SvFAKE(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 */
use warnings;
use Config;
-plan tests => 110;
+plan tests => 111;
my $Perl = which_perl();
',
'ok', { stderr => 1 },
'[perl #77492]: open $fh, ">", \*glob causes SEGV');
+
+# [perl #77684] Opening a reference to a glob copy.
+{
+ my $var = *STDOUT;
+ open my $fh, ">", \$var;
+ print $fh "hello";
+ is $var, "hello", '[perl #77684]: open $fh, ">", \$glob_copy'
+ # when this fails, it leaves an extra file:
+ or unlink \*STDOUT;
+}