]> git.ipfire.org Git - thirdparty/libvirt.git/commit
virxml: Avoid double indentation of <metadata/> element
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 25 May 2021 09:32:37 +0000 (11:32 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 25 May 2021 11:17:22 +0000 (13:17 +0200)
commit1d8dde61fd2f477d09a977aa4d45b743cbcbdce1
treec97cca1aef854c0cedaee8b4d66233f07dc25606
parent2c6402c635d269a37877e6824f216100d8613bd8
virxml: Avoid double indentation of <metadata/> element

There was a recent change in libxml2 that caused a trouble for
us. To us, <metadata/> in domain or network XMLs are just opaque
value where management application can store whatever data it
finds fit. At XML parser/formatter level, we just make a copy of
the element during parsing and then format it back. For
formatting we use xmlNodeDump() which allows caller to specify
level of indentation. Previously, the indentation was not
applied onto the very first line, but as of v2.9.12-2-g85b1792e
libxml2 is applying indentation also on the first line.

This does not work well with out virBuffer because as soon as we
call virBufferAsprintf() to append <metadata/> element,
virBufferAsprintf() will apply another level of indentation.

Instead of version checking, let's skip any indentation added by
libxml2 before virBufferAsprintf() is called.

Note, the problem is only when telling xmlNodeDump() to use
indentation, i.e. level argument is not zero. Therefore,
virXMLNodeToString() which also calls xmlNodeDump() is safe as it
passes zero.

Tested-by: Bjoern Walk <bwalk@linux.ibm.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
src/util/virxml.c