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)