--- loncom/xml/lonxml.pm 2001/05/30 15:27:13 1.81 +++ loncom/xml/lonxml.pm 2001/05/30 17:42:15 1.82 @@ -172,37 +172,7 @@ sub xmlparse { my $safeeval = new Safe; my $safehole = new Safe::Hole; - $safeeval->permit("entereval"); - $safeeval->permit(":base_math"); - $safeeval->permit("sort"); - $safeeval->deny(":base_io"); - $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); - - $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin'); - $safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos'); - $safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan'); - $safehole->wrap(\&Math::Cephes::sinh,$safeeval,'&sinh'); - $safehole->wrap(\&Math::Cephes::cosh,$safeeval,'&cosh'); - $safehole->wrap(\&Math::Cephes::tanh,$safeeval,'&tanh'); - $safehole->wrap(\&Math::Cephes::asinh,$safeeval,'&asinh'); - $safehole->wrap(\&Math::Cephes::acosh,$safeeval,'&acosh'); - $safehole->wrap(\&Math::Cephes::atanh,$safeeval,'&atanh'); - $safehole->wrap(\&Math::Cephes::erf,$safeeval,'&erf'); - $safehole->wrap(\&Math::Cephes::erfc,$safeeval,'&erfc'); - $safehole->wrap(\&Math::Cephes::j0,$safeeval,'&j0'); - $safehole->wrap(\&Math::Cephes::j1,$safeeval,'&j1'); - $safehole->wrap(\&Math::Cephes::jn,$safeeval,'&jn'); - $safehole->wrap(\&Math::Cephes::jv,$safeeval,'&jv'); - $safehole->wrap(\&Math::Cephes::y0,$safeeval,'&y0'); - $safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1'); - $safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn'); - $safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv'); - -#need to inspect this class of ops -# $safeeval->deny(":base_orig"); - $safeinit .= ';$external::target='.$target.';'; - $safeinit .= ';$external::randomseed='.&Apache::lonnet::rndseed().';'; - &Apache::run::run($safeinit,$safeeval); + &init_safespace($target,$safeeval,$safehole,$safeinit); #-------------------- Redefinition of the target in the case of compound target ($target, my @tenta) = split('&&',$target); @@ -418,6 +388,41 @@ sub callsub { return $currentstring; } +sub init_safespace { + my ($target,$safeeval,$safehole,$safeinit) = @_; + $safeeval->permit("entereval"); + $safeeval->permit(":base_math"); + $safeeval->permit("sort"); + $safeeval->deny(":base_io"); + $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); + + $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin'); + $safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos'); + $safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan'); + $safehole->wrap(\&Math::Cephes::sinh,$safeeval,'&sinh'); + $safehole->wrap(\&Math::Cephes::cosh,$safeeval,'&cosh'); + $safehole->wrap(\&Math::Cephes::tanh,$safeeval,'&tanh'); + $safehole->wrap(\&Math::Cephes::asinh,$safeeval,'&asinh'); + $safehole->wrap(\&Math::Cephes::acosh,$safeeval,'&acosh'); + $safehole->wrap(\&Math::Cephes::atanh,$safeeval,'&atanh'); + $safehole->wrap(\&Math::Cephes::erf,$safeeval,'&erf'); + $safehole->wrap(\&Math::Cephes::erfc,$safeeval,'&erfc'); + $safehole->wrap(\&Math::Cephes::j0,$safeeval,'&j0'); + $safehole->wrap(\&Math::Cephes::j1,$safeeval,'&j1'); + $safehole->wrap(\&Math::Cephes::jn,$safeeval,'&jn'); + $safehole->wrap(\&Math::Cephes::jv,$safeeval,'&jv'); + $safehole->wrap(\&Math::Cephes::y0,$safeeval,'&y0'); + $safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1'); + $safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn'); + $safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv'); + +#need to inspect this class of ops +# $safeeval->deny(":base_orig"); + $safeinit .= ';$external::target='.$target.';'; + $safeinit .= ';$external::randomseed='.&Apache::lonnet::rndseed().';'; + &Apache::run::run($safeinit,$safeeval); +} + sub startredirection { $Apache::lonxml::redirection++; push (@Apache::lonxml::outputstack, '');