summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac>2011-03-08 16:41:14 +0000
committereschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac>2011-03-08 16:41:14 +0000
commitf1549a3d0422266fa142f241c413104c3366bb51 (patch)
treee514febc26a1dc61de8084393ea3aa127c1bd4ec
parentccd3836b04b71b2a2dc2dc929e271c002c6f83bb (diff)
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
-rw-r--r--lib/sbin/ConfigurationParser.pl16
1 files 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)