From: Nicholas Clark Date: Fri, 15 Apr 2011 20:38:03 +0000 (+0100) Subject: Revert the intent of cb11131e. st (was tv) can be NULL. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2640cff19935bb6d48cc671a0aa2ec07c7636057;p=p5sagit%2FDevel-Size.git Revert the intent of cb11131e. st (was tv) can be NULL. There's (currently) a call to thing_size() with a NULL st early in total_size(). None of the existing tests caused a code path to be followed that reaches the assertion, so add one that does. --- diff --git a/Size.xs b/Size.xs index 1246590..fa2d12a 100644 --- a/Size.xs +++ b/Size.xs @@ -79,10 +79,11 @@ check_new(struct state *st, const void *const p) { U8 **leaf_p; U8 *leaf; unsigned int i; - void **tv_p = (void **) (st->tracking); + void **tv_p; - assert(st); - if (NULL == p) return FALSE; + + if (NULL == p || NULL == st) return FALSE; + tv_p = (void **) (st->tracking); TRY_TO_CATCH_SEGV { const char c = *(const char *)p; } diff --git a/t/basic.t b/t/basic.t index 4dfed68..9805f70 100644 --- a/t/basic.t +++ b/t/basic.t @@ -1,8 +1,9 @@ #!/usr/bin/perl -w -use Test::More tests => 14; +use Test::More tests => 15; use strict; use Devel::Size qw(size total_size); +use Scalar::Util qw(weaken); can_ok ('Devel::Size', qw/ size @@ -91,3 +92,11 @@ use constant LARGE => 'N' x 8192; cmp_ok (total_size(\&LARGE), '>', 8192, 'total_size for a constant includes the constant'); + +{ + my $a = []; + my $b = \$a; + weaken $b; + cmp_ok(total_size($a), '>', total_size([]), + 'making a weakref upgrades the target to PVMG and adds magic'); +}