This is a live mirror of the Perl 5 development currently hosted at
https://github.com/perl/perl5
https://perl5.git.perl.org
/
perl5.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
perlreftut: change distribution conditions
[perl5.git]
/
mg.c
diff --git
a/mg.c
b/mg.c
index
712a339
..
185fd9a
100644
(file)
--- a/
mg.c
+++ b/
mg.c
@@
-139,6
+139,10
@@
Perl_mg_get(pTHX_ SV *sv)
if (SvTYPE(sv) == SVTYPEMASK) {
Perl_croak(aTHX_ "Tied variable freed while still in use");
}
if (SvTYPE(sv) == SVTYPEMASK) {
Perl_croak(aTHX_ "Tied variable freed while still in use");
}
+ /* guard against magic having been deleted - eg FETCH calling
+ * untie */
+ if (!SvMAGIC(sv))
+ break;
/* Don't restore the flags for this entry if it was deleted. */
if (mg->mg_flags & MGf_GSKIP)
/* Don't restore the flags for this entry if it was deleted. */
if (mg->mg_flags & MGf_GSKIP)
@@
-543,7
+547,7
@@
int
Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
{
register I32 paren;
Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
{
register I32 paren;
- register char *s;
+ register char *s
= NULL
;
register I32 i;
register REGEXP *rx;
register I32 i;
register REGEXP *rx;
@@
-801,7
+805,8
@@
Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
}
break;
case '^':
}
break;
case '^':
- s = IoTOP_NAME(GvIOp(PL_defoutgv));
+ if (GvIOp(PL_defoutgv))
+ s = IoTOP_NAME(GvIOp(PL_defoutgv));
if (s)
sv_setpv(sv,s);
else {
if (s)
sv_setpv(sv,s);
else {
@@
-810,20
+815,24
@@
Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
}
break;
case '~':
}
break;
case '~':
- s = IoFMT_NAME(GvIOp(PL_defoutgv));
+ if (GvIOp(PL_defoutgv))
+ s = IoFMT_NAME(GvIOp(PL_defoutgv));
if (!s)
s = GvENAME(PL_defoutgv);
sv_setpv(sv,s);
break;
#ifndef lint
case '=':
if (!s)
s = GvENAME(PL_defoutgv);
sv_setpv(sv,s);
break;
#ifndef lint
case '=':
- sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
+ if (GvIOp(PL_defoutgv))
+ sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
break;
case '-':
break;
case '-':
- sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
+ if (GvIOp(PL_defoutgv))
+ sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
break;
case '%':
break;
case '%':
- sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
+ if (GvIOp(PL_defoutgv))
+ sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
break;
#endif
case ':':
break;
#endif
case ':':
@@
-834,7
+843,8
@@
Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
WITH_THR(sv_setiv(sv, (IV)PL_curcop->cop_arybase));
break;
case '|':
WITH_THR(sv_setiv(sv, (IV)PL_curcop->cop_arybase));
break;
case '|':
- sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
+ if (GvIOp(PL_defoutgv))
+ sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
break;
case ',':
break;
break;
case ',':
break;
@@
-1459,9
+1469,9
@@
S_magic_methpack(pTHX_ SV *sv, MAGIC *mg, char *meth)
int
Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
{
int
Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
{
- magic_methpack(sv,mg,"FETCH");
if (mg->mg_ptr)
mg->mg_flags |= MGf_GSKIP;
if (mg->mg_ptr)
mg->mg_flags |= MGf_GSKIP;
+ magic_methpack(sv,mg,"FETCH");
return 0;
}
return 0;
}
@@
-2540,7
+2550,7
@@
cleanup:
PL_Sv = tSv; /* Restore global temporaries. */
PL_Xpv = tXpv;
PL_Sv = tSv; /* Restore global temporaries. */
PL_Xpv = tXpv;
- return
0
;
+ return;
}
}