[pve-devel] [PATCH qemu-server v5 11/16] parse config: warn about duplicate sections
Fiona Ebner
f.ebner at proxmox.com
Mon Jan 27 12:29:18 CET 2025
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.ebner at 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
More information about the pve-devel
mailing list