[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

[perl #60374] Safe.pm sort {} bug with -Dusethreads



# New Ticket Created by  "Alex Hunsaker" 
# Please include the string:  [perl #60374]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=60374 >


When using a threading perl and you reval an anon sub that contains a sort,
a/$b loose their values. Both 5.8.8 and 5.10.0 seem to be affected.

(see attached perl.v for perl -V output)
-Dusethreads
perl tsafe.pl
debug:
debug:
debug:
debug:
debug:
debug:
debug:
debug:
debug: 5 4 3 2 1

without -Dusethreads
perl1 tsafe.pl
debug: 4
debug: 2
debug: 2
debug: 3
debug: 1
debug: 1 2 3 4 5

tsafe.pl
==========
use Safe;

my $safe = Safe->new('PLPerl');
$safe->permit_only(':default');
$safe->permit(qw(sort));
$safe->share(qw(&debug));

sub debug {
	print "debug: ". (shift) . "\n";
}

my $func = $safe->reval(<<'z');
sub {
my @c = sort { debug("$b"); "$a" <=> $b } qw(5 4 3 2 1);
debug(join(" ", @c));
return;
}
z

#my $f = eval 'package PLPerl; sub { @_=(); $func->(); }';
$func->();

die $@ if($@);

perl.v

perl1.v

use Safe;

my $safe = Safe->new('PLPerl');
$safe->permit_only(':default');
$safe->permit(qw(sort));
$safe->share(qw(&debug));

sub debug {
	print "debug: ". (shift) . "\n";
}

my $func = $safe->reval(<<'z');
sub {
my @c = sort { debug("$b"); "$a" <=> $b } qw(5 4 3 2 1);
debug(join(" ", @c));
return;
}
z

$main::b = 1;
#my $f = eval 'package PLPerl; sub { @_=(); $func->(); }';
$func->();

die $@ if($@);

[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]