Currently, a duplicate section will quietly override the previous instance of the section with the same identifier. Keep the current behavior of preferring later entries, but issue a warning or die when parsing strictly.
The entry for 'pending' in the result needs to start out as undefined for the check to also work in presence of empty sections. Avoid changing the returned value itself, by making sure to initialize the entry before returning. Signed-off-by: Fiona Ebner <f.eb...@proxmox.com> --- PVE/QemuServer.pm | 10 +++++++++- .../duplicate-sections.conf.strict.error | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test/parse-config-expected/duplicate-sections.conf.strict.error diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 5a55e70e..8c26fbc3 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2202,7 +2202,7 @@ sub parse_vm_config { my $res = { digest => Digest::SHA::sha1_hex($raw), snapshots => {}, - pending => {}, + pending => undef, 'special-sections' => {}, }; @@ -2242,17 +2242,23 @@ sub parse_vm_config { if ($line =~ m/^\[PENDING\]\s*$/i) { $section = { name => 'pending', type => 'pending' }; $finish_description->(); + $handle_error->("vm $vmid - duplicate section: $section->{name}\n") + if defined($res->{$section->{name}}); $conf = $res->{$section->{name}} = {}; next; } elsif ($line =~ m/^\[special:$special_sections_re_1\]\s*$/i) { $section = { name => $1, type => 'special' }; $finish_description->(); + $handle_error->("vm $vmid - duplicate special section: $section->{name}\n") + if defined($res->{'special-sections'}->{$section->{name}}); $conf = $res->{'special-sections'}->{$section->{name}} = {}; next; } elsif ($line =~ m/^\[([a-z][a-z0-9_\-]+)\]\s*$/i) { $section = { name => $1, type => 'snapshot' }; $finish_description->(); + $handle_error->("vm $vmid - duplicate snapshot section: $section->{name}\n") + if defined($res->{snapshots}->{$section->{name}}); $conf = $res->{snapshots}->{$section->{name}} = {}; next; } elsif ($line =~ m/^\[([^\]]*)\]\s*$/i) { @@ -2322,6 +2328,8 @@ sub parse_vm_config { $finish_description->(); delete $res->{snapstate}; # just to be sure + $res->{pending} = {} if !defined($res->{pending}); + return $res; } diff --git a/test/parse-config-expected/duplicate-sections.conf.strict.error b/test/parse-config-expected/duplicate-sections.conf.strict.error new file mode 100644 index 00000000..f7aabfd7 --- /dev/null +++ b/test/parse-config-expected/duplicate-sections.conf.strict.error @@ -0,0 +1 @@ +vm 8006 - duplicate section: pending -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel