--- /dev/null
+From f75abfcaa419a740a3191e56c60400f3ff18988d Mon Sep 17 00:00:00 2001
+From: Daniel Garcia Moreno <daniel.garcia@suse.com>
+Date: Fri, 19 Dec 2025 11:02:18 +0100
+Subject: [PATCH] catalog: Ignore repeated nextCatalog entries
+
+This patch makes the catalog parsing to ignore repeated entries of
+nextCatalog with the same value.
+
+Fix https://gitlab.gnome.org/GNOME/libxml2/-/issues/1019
+
+CVE: CVE-2026-0992
+
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/libxml2/-/commit/f75abfcaa419a740a3191e56c60400f3ff18988d]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ catalog.c | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/catalog.c b/catalog.c
+index 46b877e6..fa6d77ca 100644
+--- a/catalog.c
++++ b/catalog.c
+@@ -1223,9 +1223,27 @@ xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
+ BAD_CAST "delegateURI", BAD_CAST "uriStartString",
+ BAD_CAST "catalog", prefer, cgroup);
+ } else if (xmlStrEqual(cur->name, BAD_CAST "nextCatalog")) {
++ xmlCatalogEntryPtr prev = parent->children;
++
+ entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_NEXT_CATALOG,
+ BAD_CAST "nextCatalog", NULL,
+ BAD_CAST "catalog", prefer, cgroup);
++ /* Avoid duplication of nextCatalog */
++ while (prev != NULL) {
++ if ((prev->type == XML_CATA_NEXT_CATALOG) &&
++ (xmlStrEqual (prev->URL, entry->URL)) &&
++ (xmlStrEqual (prev->value, entry->value)) &&
++ (prev->prefer == entry->prefer) &&
++ (prev->group == entry->group)) {
++ if (xmlDebugCatalogs)
++ xmlCatalogPrintDebug(
++ "Ignoring repeated nextCatalog %s\n", entry->URL);
++ xmlFreeCatalogEntry(entry, NULL);
++ entry = NULL;
++ break;
++ }
++ prev = prev->next;
++ }
+ }
+ if (entry != NULL) {
+ if (parent != NULL) {
+--
+2.34.1
+