--- loncom/xml/run.pm	2006/01/11 08:52:58	1.55
+++ loncom/xml/run.pm	2006/03/16 15:47:37	1.58
@@ -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.58 2006/03/16 15:47:37 albertel 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");
     };
@@ -140,8 +140,10 @@ sub run {
 	if ($innererror=~/line (\d+)/) {
 	    my $linenumber=$1;
 	    my @code=split("\n",$code);
-	    $code[$linenumber-1]='<b><font color="red">'.
-		$code[$linenumber-1].'</font></b>';
+	    if ($linenumber < scalar(@code)) {
+		$code[$linenumber-1]='<b><font color="red">'.
+		    $code[$linenumber-1].'</font></b>';
+	    }
 	    $code=join("\n",@code);
 	}
 	&Apache::lonxml::error($errormsg.$code.'</pre>');