--- loncom/xml/Safe.pm 2003/08/30 02:26:37 1.6 +++ loncom/xml/Safe.pm 2003/08/30 03:25:34 1.7 @@ -208,19 +208,20 @@ sub varglob { sub reval { - my ($obj, $expr, $strict) = @_; - my $root = $obj->{Root}; - - # Create anon sub ref in root of compartment. - # Uses a closure (on $expr) to pass in the code to be executed. - # (eval on one line to keep line numbers as expected by caller) - my $evalcode = sprintf('package %s; sub { @_ = (); eval $expr; }', $root); - my $evalsub; - - if ($strict) { use strict; $evalsub = eval $evalcode; } - else { no strict; $evalsub = eval $evalcode; } - - return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); + $Safe::evalsub; + { + my ($obj, $expr, $strict) = @_; + my $root = $obj->{Root}; + + # Create anon sub ref in root of compartment. + # Uses a closure (on $expr) to pass in the code to be executed. + # (eval on one line to keep line numbers as expected by caller) + my $evalcode = sprintf('package %s; sub { @_ = (\'\'); eval $expr; }', $obj->{Root}); + + if ($strict) { use strict; $Safe::evalsub = eval $evalcode; } + else { no strict; $Safe::evalsub = eval $evalcode; } + } + return Opcode::_safe_call_sv($_[0]->{Root}, $_[0]->{Mask}, $Safe::evalsub); } sub rdo { @@ -228,7 +229,7 @@ sub rdo { my $root = $obj->{Root}; my $evalsub = eval - sprintf('package %s; sub { @_ = (); do $file }', $root); + sprintf('package %s; sub { @_ = (\'\'); do $file }', $root); return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); }