summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorFlorian Ragwitz <rafl@debian.org>2010-11-16 07:14:04 +0100
committerFlorian Ragwitz <rafl@debian.org>2010-11-16 07:26:24 +0100
commit249534c343ab758089ce40786709465e328c8b2d (patch)
tree266791ae56984c6181edf2c2d3fa7c1f2e623589 /sv.c
parentecbbcad639528457f99648a7a5576d629350122e (diff)
downloadperl-249534c343ab758089ce40786709465e328c8b2d.tar.gz
Check for deleted stashes when reporting var names
The stash of the GV is what's being used to look up a global variables name. If the GV has no stash, we might as well give up early. This fixes a segfault because S_varname would later assume gv_fullname4 has resolved the glob's full name and try to use the svu_pv slot of the scalar returned, while all it got back was undef.
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sv.c b/sv.c
index 57db4f4894..3d5dc68fa0 100644
--- a/sv.c
+++ b/sv.c
@@ -13695,7 +13695,7 @@ S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
case OP_GVSV:
gv = cGVOPx_gv(obase);
- if (!gv || (match && GvSV(gv) != uninit_sv))
+ if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
break;
return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);