In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/7d926cfad45d0fd1b9546391623278b92d3e4757?hp=340458b54f884968f1f78789d57137d34f239152>

- Log -----------------------------------------------------------------
commit 7d926cfad45d0fd1b9546391623278b92d3e4757
Author: Rafael Garcia-Suarez <r...@consttype.org>
Date:   Mon Sep 13 15:15:40 2010 +0200

    Bump Safe's VERSION to 2.28

M       dist/Safe/Changes
M       dist/Safe/META.yml
M       dist/Safe/Safe.pm

commit 7650682f4377a73dc7c46a6c3b8113a5f987c902
Author: Rafael Garcia-Suarez <r...@consttype.org>
Date:   Mon Sep 13 15:11:27 2010 +0200

    Avoid infinite loop in _find_code_refs.
    
    Patch by Yasushi Nakajima (rt.cpan.org #61262)

M       dist/Safe/Safe.pm
M       dist/Safe/t/safewrap.t
-----------------------------------------------------------------------

Summary of changes:
 dist/Safe/Changes      |    4 ++++
 dist/Safe/META.yml     |    4 ++--
 dist/Safe/Safe.pm      |   10 ++++++++--
 dist/Safe/t/safewrap.t |   11 ++++++++++-
 4 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/dist/Safe/Changes b/dist/Safe/Changes
index a00878b..7dc1c1d 100644
--- a/dist/Safe/Changes
+++ b/dist/Safe/Changes
@@ -1,3 +1,7 @@
+2.28 Mon Sep 13 2010
+    - Avoid infinite loop in _find_code_refs.
+      Patch by Yasushi Nakajima (rt.cpan.org #61262)
+
 2.27 Thu Apr 29 2010
     - Wrap coderefs returned by reval() and rdo()
     - Add even more version::vxs routines to the default share
diff --git a/dist/Safe/META.yml b/dist/Safe/META.yml
index 6718a37..8938397 100644
--- a/dist/Safe/META.yml
+++ b/dist/Safe/META.yml
@@ -1,6 +1,6 @@
 --- #YAML:1.0
 name:               Safe
-version:            2.27
+version:            2.28
 abstract:           ~
 author:  []
 license:            unknown
@@ -14,7 +14,7 @@ no_index:
     directory:
         - t
         - inc
-generated_by:       ExtUtils::MakeMaker version 6.56
+generated_by:       ExtUtils::MakeMaker version 6.57_05
 meta-spec:
     url:      http://module-build.sourceforge.net/META-spec-v1.4.html
     version:  1.4
diff --git a/dist/Safe/Safe.pm b/dist/Safe/Safe.pm
index bca4dfe..5d40528 100644
--- a/dist/Safe/Safe.pm
+++ b/dist/Safe/Safe.pm
@@ -2,9 +2,9 @@ package Safe;
 
 use 5.003_11;
 use strict;
-use Scalar::Util qw(reftype);
+use Scalar::Util qw(reftype refaddr);
 
-$Safe::VERSION = "2.27";
+$Safe::VERSION = "2.28";
 
 # *** Don't declare any lexicals above this point ***
 #
@@ -362,10 +362,12 @@ sub reval {
     return (wantarray) ? @subret : $subret[0];
 }
 
+my %OID;
 
 sub wrap_code_refs_within {
     my $obj = shift;
 
+    %OID = ();
     $obj->_find_code_refs('wrap_code_ref', @_);
 }
 
@@ -377,6 +379,10 @@ sub _find_code_refs {
     for my $item (@_) {
         my $reftype = $item && reftype $item
             or next;
+
+        # skip references already seen
+        next if ++$OID{refaddr $item} > 1;
+
         if ($reftype eq 'ARRAY') {
             $obj->_find_code_refs($visitor, @$item);
         }
diff --git a/dist/Safe/t/safewrap.t b/dist/Safe/t/safewrap.t
index 27166f8..b99f416 100644
--- a/dist/Safe/t/safewrap.t
+++ b/dist/Safe/t/safewrap.t
@@ -11,7 +11,7 @@ BEGIN {
 
 use strict;
 use Safe 1.00;
-use Test::More tests => 9;
+use Test::More tests => 10;
 
 my $safe = Safe->new('PLPerl');
 $safe->permit_only(qw(:default sort));
@@ -37,3 +37,12 @@ my $sub1w2 = $args[1][0][1]{sub};
 isnt $sub1w2, $sub1;
 is eval { $sub1w2->() }, undef;
 like $@, qr/eval .* trapped by operation mask/;
+
+# Avoid infinite recursion when looking for coderefs
+my $r = $safe->reval(<<'END');
+%a = ();
+%b = (a => \%a);
+$a{b} = \%b;
+42;
+END
+is($r, 42);

--
Perl5 Master Repository

Reply via email to