wrong test for magicalness
Zefram [Tue, 27 Aug 2013 14:57:35 +0000 (15:57 +0100)]
Devel::Size looks at the SvMAGIC pointer for any SV that's SVt_PVMG or above.
This is incorrect.  It is actually necessary (and sufficient) to check the
SvMAGICAL flag.  Attached patch fixes.

Size.xs

diff --git a/Size.xs b/Size.xs
index 05e540a..109dd15 100644 (file)
--- a/Size.xs
+++ b/Size.xs
@@ -707,7 +707,7 @@ sv_size(pTHX_ struct state *const st, const SV * const orig_thing,
   }
   st->total_size += sizeof(SV) + body_sizes[type];
 
-  if (type >= SVt_PVMG) {
+  if (SvMAGICAL(thing)) {
       magic_size(aTHX_ thing, st);
   }