From d0ba18e17e96e9a2db54d050c4bd86b6d2d2dd03 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Wed, 15 May 2019 10:03:50 +0200 Subject: [PATCH 1/1] prevent autovivification of sectionconfig options If, somehow, someone passes a config to check_config with keys set that are not in the options for that type, this fixed check lead to autovivification, meaning that any future calls to the same worker had an additional option for that type which is not optional this lead to a wrongfully deleting of entries when updating an entry of a different type, since all entries of the original types suddenly did not satisfy their required options and would not get parsed by read_file anymore (thus missing when a successful write_file was done) Signed-off-by: Dominik Csapak --- src/PVE/SectionConfig.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PVE/SectionConfig.pm b/src/PVE/SectionConfig.pm index cc03aea..09ab5c2 100644 --- a/src/PVE/SectionConfig.pm +++ b/src/PVE/SectionConfig.pm @@ -379,10 +379,10 @@ sub check_config { foreach my $k (keys %$config) { my $value = $config->{$k}; - + die "can't change value of fixed parameter '$k'\n" - if !$create && $opts->{$k}->{fixed}; - + if !$create && $opts->{$k} && $opts->{$k}->{fixed}; + if (defined($value)) { my $tmp = $class->check_value($type, $k, $value, $sectionId, $skipSchemaCheck); $settings->{$k} = $class->decode_value($type, $k, $tmp); -- 2.39.2