From da758215531b3de221a46fad328580fc62d9e798 Mon Sep 17 00:00:00 2001 From: "www@jspc55" Date: Thu, 6 Mar 2014 14:34:23 +0100 Subject: [PATCH] added safety check to changeConfigVal, register/field must exist in specification --- tools/changeConfigVal.pl | 2 ++ tools/xmlOperations.pm | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/tools/changeConfigVal.pl b/tools/changeConfigVal.pl index 2272a24..43fc88a 100755 --- a/tools/changeConfigVal.pl +++ b/tools/changeConfigVal.pl @@ -118,6 +118,8 @@ for my $line (@inputLines){ my $field = $2; my $value = $3; + die "Register/Field combination not valid!\n" unless specExists($register,$field); + print VERBOSE "changed register $register field $field to $value\n"; diff --git a/tools/xmlOperations.pm b/tools/xmlOperations.pm index 62b3147..cf63c83 100644 --- a/tools/xmlOperations.pm +++ b/tools/xmlOperations.pm @@ -58,6 +58,7 @@ sub getSpecTree{ ## xml file operations ############################### + sub deleteFile { my $configFileName = $_[0]; my $configFile = $confDir . "/" . $configFileName; @@ -306,6 +307,8 @@ sub del { my $register = $xmltree->findnodes( "/MAPS/register[\@name='" . $registerName . "']" ) ->shift(); + + die "Register $registerName not valid according to specification\n" unless(defined($register)); if ( $fieldName eq "" ) { # no field specified, remove whole register if(defined ( $register ) ) { @@ -444,6 +447,35 @@ sub copyDefaultRegister { # description: copys register "registerName" from $specTree to $configTree # make change permanent by calling writeConfigFile() hereafter. +sub specExists { + my $registerName = $_[0]; + my $fieldName = $_[1]; + + my $specRegister = + $specTree->findnodes( "/MAPS/register[\@name='" . $registerName . "']" ) + ->shift(); + if( ($fieldName eq "*") and (defined($specRegister)) ) { + return 1; + } + + my $field = + $specTree->findnodes( "/MAPS/register[\@name='" + . $registerName + . "']/field[\@name='" + . $fieldName + . "']" )->shift(); + + if ( defined($specRegister) and defined($field) ) { + return 1; + } + return 0; +} +# args: registerName, fieldName +# globs: $specTree +# description: returns 1 if registerName/fieldName combination exists in specification. +# registerName/* is also allowed, will then check if register alone is defined + + sub writeConfigFile(){ open( SCHREIBEN, "> $configFile" ) or print "could not open file $configFile for writing: $!\n"; -- 2.43.0