From a28c059f727f0bac8d702d03015ee5c959bea159 Mon Sep 17 00:00:00 2001 From: Daniel Garcia Moreno Date: Fri, 22 May 2026 12:21:20 +0200 Subject: [PATCH] xmlcatalog: overflow check for large --shell commands Fix https://gitlab.gnome.org/GNOME/libxml2/-/work_items/1124 --- xmlcatalog.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/xmlcatalog.c b/xmlcatalog.c index c02b97f6..a1c9064e 100644 --- a/xmlcatalog.c +++ b/xmlcatalog.c @@ -118,6 +118,12 @@ static void usershell(void) { (*cur != '\n') && (*cur != '\r')) { if (*cur == 0) break; + /* Do not read beyond the command array capacity */ + if (i >= (int)sizeof(command) - 2) { + printf("Invalid command %s\n", cur); + i = 0; + break; + } command[i++] = *cur++; } command[i] = 0; @@ -135,6 +141,11 @@ static void usershell(void) { while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) { if (*cur == 0) break; + if (i >= (int)sizeof(arg) - 2) { + printf("Invalid arg %s\n", arg); + i = 0; + break; + } arg[i++] = *cur++; } arg[i] = 0; @@ -147,6 +158,11 @@ static void usershell(void) { cur = arg; memset(argv, 0, sizeof(argv)); while (*cur != 0) { + if (i >= (int)sizeof(argv) / (int)sizeof(char*)) { + printf("Too much arguments\n"); + break; + } + while ((*cur == ' ') || (*cur == '\t')) cur++; if (*cur == '\'') { cur++;