--- loncom/xml/run.pm 2006/01/11 08:52:58 1.55 +++ loncom/xml/run.pm 2012/12/18 18:27:43 1.61 @@ -1,6 +1,6 @@ package Apache::run; # -# $Id: run.pm,v 1.55 2006/01/11 08:52:58 albertel Exp $ +# $Id: run.pm,v 1.61 2012/12/18 18:27:43 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -50,7 +50,7 @@ while (!$_LONCAPA_INTERNAL_oldexpression my $__LC__prefix; my $__LC__result; while (1) { - if ($__LC__a =~ m-^&(theta|i|pi|rho)-) { last; } + if ($__LC__a =~ m-^&(theta|pi|rho)$-) { last; } { use strict; no strict "vars"; @@ -78,7 +78,7 @@ sub evaluate { my $result = ''; $@=''; $Apache::run::timeout=0; - $main::SIG{'ALRM'} = sub { + local $main::SIG{'ALRM'} = sub { $Apache::run::timeout=1; die("timeout"); }; @@ -116,7 +116,7 @@ sub run { my @result; $@=''; $Apache::run::timeout=0; - $main::SIG{'ALRM'} = sub { + local $main::SIG{'ALRM'} = sub { $Apache::run::timeout=1; die("timeout"); }; @@ -135,13 +135,15 @@ sub run { } my $errormsg='
'.&HTML::Entities::encode($error,'<>&"').' '. &HTML::Entities::encode($innererror,'<>&"'). - 'occured while running
'; + 'occurred while running
'; $code=&HTML::Entities::encode($code,'<>&"'); if ($innererror=~/line (\d+)/) { my $linenumber=$1; my @code=split("\n",$code); - $code[$linenumber-1]=''. - $code[$linenumber-1].''; + if ($linenumber < scalar(@code)) { + $code[$linenumber-1]=''. + $code[$linenumber-1].''; + } $code=join("\n",@code); } &Apache::lonxml::error($errormsg.$code.''); @@ -166,11 +168,11 @@ sub dump { $line.='$'.$symname.'='.$safeeval->reval('$'.$symname)."\n"; } } - if ($safeeval->reval('defined(@'.$symname.')')) { + if ($safeeval->reval('@'.$symname)) { $line.='@'.$symname.'=('. $safeeval->reval('join(",",@'.$symname.')').")"."\n"; } - if ($safeeval->reval('defined(%'.$symname.')')) { + if ($safeeval->reval('%'.$symname)) { $line.='%'.$symname.'=('; $line.=$safeeval->reval('join(",",map { $_."=>".$'. $symname.'{$_} } sort keys %'. @@ -189,3 +191,29 @@ sub dump { 1; __END__; + +=pod + +=head1 NAME + +Apache::run.pm + +=head1 SYNOPSIS + +Used to prevent poorly written problems from +causing lingering after effects + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + + +=head1 NOTABLE SUBROUTINES + +=over + +=item run(), dump(), evaluate() + +=back + +=cut +