summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2006-10-18 17:35:06 +0000
committerNicholas Clark <nick@ccl4.org>2006-10-18 17:35:06 +0000
commit29f4f0ab0cd22a86a6abeeb9b5de96d9506fd84a (patch)
tree0183f573a777d12318f1818605b079c1a58d4772 /sv.c
parent5df4b323ce05ce1c7f9261685804fb4bc7aadbce (diff)
downloadperl-29f4f0ab0cd22a86a6abeeb9b5de96d9506fd84a.tar.gz
panic if we attempt to sv_setsv to or from an already freed SV.
p4raw-id: //depot/perl@29040
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sv.c b/sv.c
index 52fa64f9b0..8820f2a2d6 100644
--- a/sv.c
+++ b/sv.c
@@ -3406,9 +3406,18 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
if (sstr == dstr)
return;
+
+ if (SvIS_FREED(dstr)) {
+ Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
+ " to a freed scalar %p", sstr, dstr);
+ }
SV_CHECK_THINKFIRST_COW_DROP(dstr);
if (!sstr)
sstr = &PL_sv_undef;
+ if (SvIS_FREED(sstr)) {
+ Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p", sstr,
+ dstr);
+ }
stype = SvTYPE(sstr);
dtype = SvTYPE(dstr);