24672 is innocent. valgrind + perl's malloc considered harmful.
Nicholas Clark [Thu, 2 Jun 2005 14:42:20 +0000 (14:42 +0000)]
p4raw-id: //depot/perl@24677

toke.c

diff --git a/toke.c b/toke.c
index cb17be9..ff82444 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -5538,8 +5538,11 @@ S_pending_ident(pTHX)
             /* might be an "our" variable" */
             if (PAD_COMPNAME_FLAGS(tmp) & SVpad_OUR) {
                 /* build ops for a bareword */
-                SV *sym = newSVpvn(HvNAME_get(PAD_COMPNAME_OURSTASH(tmp)),
-                                  HvNAMELEN_get(PAD_COMPNAME_OURSTASH(tmp)));
+               HV *stash = PAD_COMPNAME_OURSTASH(tmp);
+               HEK *stashname = HvNAME_HEK(stash);
+                SV *sym = stashname
+                   ? newSVpvn(HEK_KEY(stashname), HEK_LEN(stashname))
+                   : newSVpvn(0, 0);
                 sv_catpvn(sym, "::", 2);
                 sv_catpv(sym, PL_tokenbuf+1);
                 yylval.opval = (OP*)newSVOP(OP_CONST, 0, sym);
@@ -9739,9 +9742,12 @@ S_scan_inputsymbol(pTHX_ char *start)
            */
            if ((tmp = pad_findmy(d)) != NOT_IN_PAD) {
                if (PAD_COMPNAME_FLAGS(tmp) & SVpad_OUR) {
-                   SV *sym = sv_2mortal(
-                           newSVpvn(HvNAME_get(PAD_COMPNAME_OURSTASH(tmp)),
-                                    HvNAMELEN_get(PAD_COMPNAME_OURSTASH(tmp))));
+                   HV *stash = PAD_COMPNAME_OURSTASH(tmp);
+                   HEK *stashname = HvNAME_HEK(stash);
+                   SV *sym = sv_2mortal(stashname
+                                        ? newSVpvn(HEK_KEY(stashname),
+                                                   HEK_LEN(stashname))
+                                        : newSVpvn(0, 0));
                    sv_catpvn(sym, "::", 2);
                    sv_catpv(sym, d+1);
                    d = SvPVX(sym);