a4ac56
From b3937e202aaf10c2f8996e2993c880bb38a7a268 Mon Sep 17 00:00:00 2001
a4ac56
From: Father Chrysostomos <sprout@cpan.org>
a4ac56
Date: Wed, 1 Nov 2017 13:11:27 -0700
a4ac56
Subject: [PATCH] =?UTF-8?q?Carp:=20Don=E2=80=99t=20choke=20on=20ISA=20cons?=
a4ac56
 =?UTF-8?q?tant?=
a4ac56
MIME-Version: 1.0
a4ac56
Content-Type: text/plain; charset=UTF-8
a4ac56
Content-Transfer-Encoding: 8bit
a4ac56
a4ac56
This broke some time between 1.29 (perl 5.18) and 1.3301 (perl 5.20):
a4ac56
a4ac56
$ perl5.20.1 -e 'package Foo { use constant ISA => 42; Bar::f() } package Bar { use Carp; sub f { carp "tun syn" } }'
a4ac56
Not a GLOB reference at /usr/local/lib/perl5/5.20.1/Carp.pm line 560.
a4ac56
a4ac56
and still persisted in bleadperl (Carp 1.43) until this commit.
a4ac56
a4ac56
The code that goes poking through the symbol table needs to take into
a4ac56
account that not all stash elements are globs.
a4ac56
a4ac56
Signed-off-by: Petr Písař <ppisar@redhat.com>
a4ac56
---
a4ac56
 dist/Carp/lib/Carp.pm |  3 ++-
a4ac56
 dist/Carp/t/Carp.t    | 13 ++++++++++++-
a4ac56
 2 files changed, 14 insertions(+), 2 deletions(-)
a4ac56
a4ac56
diff --git a/dist/Carp/lib/Carp.pm b/dist/Carp/lib/Carp.pm
a4ac56
index 6127b26f54..ef11a0c046 100644
a4ac56
--- a/dist/Carp/lib/Carp.pm
a4ac56
+++ b/dist/Carp/lib/Carp.pm
a4ac56
@@ -593,7 +593,8 @@ sub trusts_directly {
a4ac56
     for my $var (qw/ CARP_NOT ISA /) {
a4ac56
         # Don't try using the variable until we know it exists,
a4ac56
         # to avoid polluting the caller's namespace.
a4ac56
-        if ( $stash->{$var} && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) {
a4ac56
+        if ( $stash->{$var} && ref \$stash->{$var} eq 'GLOB'
a4ac56
+          && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) {
a4ac56
            return @{$stash->{$var}}
a4ac56
         }
a4ac56
     }
a4ac56
diff --git a/dist/Carp/t/Carp.t b/dist/Carp/t/Carp.t
a4ac56
index 65daed7c6c..b1e399d143 100644
a4ac56
--- a/dist/Carp/t/Carp.t
a4ac56
+++ b/dist/Carp/t/Carp.t
a4ac56
@@ -3,7 +3,7 @@ no warnings "once";
a4ac56
 use Config;
a4ac56
 
a4ac56
 use IPC::Open3 1.0103 qw(open3);
a4ac56
-use Test::More tests => 67;
a4ac56
+use Test::More tests => 68;
a4ac56
 
a4ac56
 sub runperl {
a4ac56
     my(%args) = @_;
a4ac56
@@ -488,6 +488,17 @@ SKIP:
a4ac56
     );
a4ac56
 }
a4ac56
 
a4ac56
+{
a4ac56
+    package Mpar;
a4ac56
+    sub f { Carp::croak "tun syn" }
a4ac56
+
a4ac56
+    package Phou;
a4ac56
+    $Phou::{ISA} = \42;
a4ac56
+    eval { Mpar::f };
a4ac56
+}
a4ac56
+like $@, qr/tun syn/, 'Carp can handle non-glob ISA stash elems';
a4ac56
+
a4ac56
+
a4ac56
 # New tests go here
a4ac56
 
a4ac56
 # line 1 "XA"
a4ac56
-- 
a4ac56
2.13.6
a4ac56