X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hv.c;h=ee08ce4169d5e1537885c9522225c582633fb9e5;hb=358837b893c99fff8f52773c2a0b23e17d8dcdb7;hp=f5508bfbcf9d61bc872eebbce4734476826e0893;hpb=2f86008e342644f19f6a5b7136a5027c19cae4c1;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hv.c b/hv.c index f5508bf..ee08ce4 100644 --- a/hv.c +++ b/hv.c @@ -279,6 +279,8 @@ S_hv_fetch_flags(pTHX_ HV *hv, const char *key, I32 klen, I32 lval, int flags) /* entry = (HvARRAY(hv))[hash & (I32) HvMAX(hv)]; */ entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max]; for (; entry; entry = HeNEXT(entry)) { + if (!HeKEY_hek(entry)) + continue; if (HeHASH(entry) != hash) /* strings can't be equal */ continue; if (HeKLEN(entry) != (I32)klen) @@ -416,6 +418,7 @@ Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, register U32 hash) #endif } + keysave = key = SvPV(keysv, klen); xhv = (XPVHV*)SvANY(hv); if (!xhv->xhv_array /* !HvARRAY(hv) */) { if (lval @@ -430,7 +433,6 @@ Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, register U32 hash) return 0; } - keysave = key = SvPV(keysv, klen); is_utf8 = (SvUTF8(keysv)!=0); if (is_utf8) { @@ -1715,8 +1717,8 @@ Perl_hv_clear(pTHX_ HV *hv) if (HeVAL(entry) && SvREADONLY(HeVAL(entry))) { SV* keysv = hv_iterkeysv(entry); Perl_croak(aTHX_ - "Attempt to delete readonly key '%_' from a restricted hash", - keysv); + "Attempt to delete readonly key '%"SVf"' from a restricted hash", + keysv); } SvREFCNT_dec(HeVAL(entry)); HeVAL(entry) = &PL_sv_undef;