From b84d08606128d31ab874c747150180e32486af44 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 23 Mar 2004 17:47:44 +0000 Subject: [PATCH] hv_delete_common was freeing the key, then passing the freed pointer to S_hv_notallowed. D'oh! p4raw-id: //depot/perl@22569 --- hv.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hv.c b/hv.c index cc642e0..627140b 100644 --- a/hv.c +++ b/hv.c @@ -977,19 +977,21 @@ S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, continue; if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8) continue; - if (k_flags & HVhek_FREEKEY) - Safefree(key); /* if placeholder is here, it's already been deleted.... */ if (HeVAL(entry) == &PL_sv_placeholder) { - return Nullsv; + if (k_flags & HVhek_FREEKEY) + Safefree(key); + return Nullsv; } else if (SvREADONLY(hv) && HeVAL(entry) && SvREADONLY(HeVAL(entry))) { S_hv_notallowed(aTHX_ k_flags, key, klen, "delete readonly key '%"SVf"' from" ); } + if (k_flags & HVhek_FREEKEY) + Safefree(key); if (d_flags & G_DISCARD) sv = Nullsv; -- 1.8.3.1