From 61e5f3ea97609bb221a355579d2285ddd28d90d2 Mon Sep 17 00:00:00 2001 From: mohammadmseet-hue Date: Thu, 16 Apr 2026 02:54:37 +0200 Subject: [PATCH] fix: add bounds checks to xmlSnprintfElements in valid.c CVE-2025-24928 fixed xmlSnprintfElementContent for unchecked strcat() writes, but the sibling function xmlSnprintfElements has the identical unfixed pattern. The strcat(buf, "(") before the while loop and strcat(buf, ")") after the loop exit have no bounds checks. Add remaining-space checks before both strcat calls, with early return and ellipsis when space is insufficient. --- valid.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/valid.c b/valid.c index 9dbace651..774f51a3d 100644 --- a/valid.c +++ b/valid.c @@ -4625,7 +4625,15 @@ xmlSnprintfElements(char *buf, int size, xmlNodePtr node, int glob) { int len; if (node == NULL) return; - if (glob) strcat(buf, "("); + len = strlen(buf); + if (glob) { + if (size - len < 50) { + if ((size - len > 4) && (buf[len - 1] != '.')) + strcat(buf, " ..."); + return; + } + strcat(buf, "("); + } cur = node; while (cur != NULL) { len = strlen(buf); @@ -4689,7 +4697,11 @@ xmlSnprintfElements(char *buf, int size, xmlNodePtr node, int glob) { } cur = cur->next; } - if (glob) strcat(buf, ")"); + if (glob) { + len = strlen(buf); + if (size - len > 1) + strcat(buf, ")"); + } } /** -- GitLab