Don’t CLONE nameless hashes
authorFather Chrysostomos <sprout@cpan.org>
Tue, 23 Nov 2010 00:42:00 +0000 (16:42 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 23 Nov 2010 00:43:32 +0000 (16:43 -0800)
The cloning code was trying to call CLONE on nameless hashes that nonetheless had an effective name (HvENAME).

This can happen if a nameless hash is assigned over a stash, as in

  *foo:: = {}

or if a stash is undefined:

  undef %foo::

(The effective name is how perl tracks the location internally, for
the sake of updating MRO caches.)

sv.c

diff --git a/sv.c b/sv.c
index 39a76b5..5705890 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -11874,7 +11874,7 @@ S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
                             : 0;
 
                        /* Record stashes for possible cloning in Perl_clone(). */
-                       if (hvname)
+                       if (HvNAME(sstr))
                            av_push(param->stashes, dstr);
                    }
                }