}
 
 sub _cat_file_cb {
-       my ($bref, undef, undef, $size, $result) = @_;
-       @$result = ($bref, $size);
+       my ($bref, $oid, $type, $size, $result) = @_;
+       @$result = ($bref, $oid, $type, $size);
 }
 
 sub cat_file {
-       my ($self, $oid, $sizeref) = @_;
+       my ($self, $oid) = @_;
        my $result = [];
        cat_async($self, $oid, \&_cat_file_cb, $result);
        cat_async_wait($self);
-       $$sizeref = $result->[1] if $sizeref;
-       $result->[0];
+       wantarray ? @$result : $result->[0];
 }
 
 sub check_async_step ($$) {
 
        chomp $buf;
 
        my $gcf = PublicInbox::Git->new($dir);
-       my $rsize;
-       my $x = $gcf->cat_file($buf, \$rsize);
-       is($rsize, $size, 'got correct size ref on big file');
-       is(length($$x), $size, 'read correct number of bytes');
+       my @x = $gcf->cat_file($buf);
+       is($x[2], 'blob', 'got blob on wantarray');
+       is($x[3], $size, 'got correct size ref on big file');
+       is(length(${$x[0]}), $size, 'read correct number of bytes');
 
        my $ref = $gcf->qx(qw(cat-file blob), $buf);
        is($?, 0, 'no error on scalar success');