From e99dd242e93e68c07d03007f82d7def8d34c15b8 Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Mon, 18 Oct 2021 12:02:27 +0100 Subject: [PATCH] Strip inner XML text when loading metainfo.xml files This allows us to do the right thing if given an XML file with leading or trailing space in the entry, e.g. org.uefi.capsule --- libfwupdplugin/fu-cabinet.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/libfwupdplugin/fu-cabinet.c b/libfwupdplugin/fu-cabinet.c index 2c549b803..0cd0f3929 100644 --- a/libfwupdplugin/fu-cabinet.c +++ b/libfwupdplugin/fu-cabinet.c @@ -494,6 +494,19 @@ fu_cabinet_set_lowercase_checksum_cb(XbBuilderFixup *builder_fixup, return TRUE; } +static gboolean +fu_cabinet_fixup_strip_inner_text_cb(XbBuilderFixup *self, + XbBuilderNode *bn, + gpointer user_data, + GError **error) +{ +#if LIBXMLB_CHECK_VERSION(0, 3, 4) + if (xb_builder_node_get_first_child(bn) == NULL) + xb_builder_node_add_flag(bn, XB_BUILDER_NODE_FLAG_STRIP_TEXT); +#endif + return TRUE; +} + /* adds each GCabFile to the silo */ static gboolean fu_cabinet_build_silo_file(FuCabinet *self, @@ -628,6 +641,7 @@ fu_cabinet_build_silo(FuCabinet *self, GBytes *data, GError **error) g_autoptr(XbBuilderFixup) fixup1 = NULL; g_autoptr(XbBuilderFixup) fixup2 = NULL; g_autoptr(XbBuilderFixup) fixup3 = NULL; + g_autoptr(XbBuilderFixup) fixup4 = NULL; /* verbose profiling */ if (g_getenv("FWUPD_XMLB_VERBOSE") != NULL) { @@ -671,6 +685,13 @@ fu_cabinet_build_silo(FuCabinet *self, GBytes *data, GError **error) NULL); xb_builder_add_fixup(self->builder, fixup3); + /* strip inner nodes without children */ + fixup4 = xb_builder_fixup_new("TextStripInner", + fu_cabinet_fixup_strip_inner_text_cb, + self, + NULL); + xb_builder_add_fixup(self->builder, fixup4); + /* did we get any valid files */ self->silo = xb_builder_compile(self->builder, XB_BUILDER_COMPILE_FLAG_NONE, NULL, error); if (self->silo == NULL)