From f1549a3d0422266fa142f241c413104c3366bb51 Mon Sep 17 00:00:00 2001 From: eschnett Date: Tue, 8 Mar 2011 16:41:14 +0000 Subject: Improve error messages when parsing configuration.ccl files In the event of missing {}'s, the code actually went into an endless loop. The culprit was the while immediately following the error message. It was not capable of detecting end of file (i.e. when $data->[$line_number] became undefined). I added checks to ensure $data->[$Line_number] was defined in two additional while loops. [patch from Steve Brandt] git-svn-id: http://svn.cactuscode.org/flesh/trunk@4687 17b73243-c579-4c4c-a9d2-2d5706c11dac --- lib/sbin/ConfigurationParser.pl | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/sbin/ConfigurationParser.pl b/lib/sbin/ConfigurationParser.pl index 3b4dc8fb..40f7906f 100644 --- a/lib/sbin/ConfigurationParser.pl +++ b/lib/sbin/ConfigurationParser.pl @@ -207,7 +207,7 @@ sub ParseConfigurationCCL } elsif($line =~ m/^\s*OPTIONAL\s*/i) { - ($optional, $define, $line_number) = &ParseOptionalBlock($line_number, \@data); + ($optional, $define, $line_number) = &ParseOptionalBlock($filename, $line_number, \@data); $cfg->{"\U$thorn\E OPTIONAL"} .= "$optional "; $cfg->{"\U$thorn\E OPTIONAL \U$optional\E DEFINE"} = $define; } @@ -249,13 +249,13 @@ sub ParseProvidesBlock $line_number++; if($data->[$line_number] !~ m/^\s*\{\s*$/) { - &CST_error (0, "Error parsing provides block line '$data->[$line_number]'.". + &CST_error (0, "Error parsing provides block line '$data->[$line_number]' $file_name:$line_number ". 'Missing { at start of block'); - $line_number++ while($data->[$line_number] !~ m:\s*\}\s*:); + $line_number++ while(defined($data->[$line_number]) and $data->[$line_number] !~ m:\s*\}\s*:); } else { - while($data->[$line_number] !~ m:\s*\}\s*:) + while(defined($data->[$line_number]) and $data->[$line_number] !~ m:\s*\}\s*:) { $line_number++; if($data->[$line_number] =~ m/^\s*SCRIPT\s*(.*)$/i) @@ -299,7 +299,7 @@ sub ParseProvidesBlock #@@*/ sub ParseOptionalBlock { - my ($line_number, $data) = @_; + my ($file_name, $line_number, $data) = @_; my ($optional, $define); $data->[$line_number] =~ m/^\s*OPTIONAL\s*(.*)/i; @@ -312,13 +312,13 @@ sub ParseOptionalBlock if($data->[$line_number] !~ m/^\s*\{\s*$/) { - &CST_error (0, "Error parsing optional block line '$data->[$line_number]'". + &CST_error (0, "Error parsing optional block line '$data->[$line_number]' $file_name:$line_number". ' Missing { at start of block.'); - $line_number++ while($data->[$line_number] !~ m:\s*\}\s*:); + $line_number++ while(defined($data->[$line_number]) and $data->[$line_number] !~ m:\s*\}\s*:); } else { - while($data->[$line_number] !~ m:\s*\}\s*:) + while(defined($data->[$line_number]) and $data->[$line_number] !~ m:\s*\}\s*:) { $line_number++; if($data->[$line_number] =~ m/^\s*DEFINE\s*(.*)$/i) -- cgit v1.2.3