/* pp_hot.c
*
- * Copyright (c) 1991-2003, Larry Wall
+ * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ * 2000, 2001, 2002, 2003, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
else {
sv = AvARRAY(av)[++cx->blk_loop.iterix];
}
+ if (sv && SvREFCNT(sv) == 0) {
+ *itersvp = Nullsv;
+ Perl_croak(aTHX_
+ "Use of freed value in iteration (perhaps you modified the iterated array within the loop?)");
+ }
+
if (sv)
SvTEMP_off(sv);
else
packname = Nullch;
if(SvOK(sv) && (packname = SvPV(sv, packlen))) {
- HE* he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
+ HE* he;
+ he = hv_fetch_ent(PL_stashcache, sv, 0, 0);
if (he) {
- stash = (HV*)HeVAL(he);
+ stash = (HV*)SvIV(HeVAL(he));
goto fetch;
}
}
if (!stash)
packsv = sv;
else {
- SvREFCNT_inc((SV*)stash);
- if(!hv_store(PL_stashcache, packname, packlen, (SV*)stash, 0))
- SvREFCNT_dec((SV*)stash);
- }
+ SV* ref = newSViv((IV)stash);
+ hv_store(PL_stashcache, packname, packlen, ref, 0);
+ }
goto fetch;
}
/* it _is_ a filehandle name -- replace with a reference */