From ffb76dc866342cef6a4914873faaa880d14d5aa4 Mon Sep 17 00:00:00 2001 From: Paolo Bacchilega Date: Sun, 14 Jun 2026 08:49:33 +0200 Subject: [PATCH] Check line length when parsing command output Fixes https://gitlab.gnome.org/GNOME/file-roller/-/issues/327 --- src/fr-command-7z.c | 7 +++++-- src/fr-command-rar.c | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/fr-command-7z.c b/src/fr-command-7z.c index a088898a..9b62fc3e 100644 --- a/src/fr-command-7z.c +++ b/src/fr-command-7z.c @@ -260,10 +260,13 @@ parse_progress_line (FrArchive *archive, fr_archive_progress (archive, fr_archive_progress_inc_completed_files (archive, 1)); } else { - char filename[4196]; + const int MAX_FILENAME_LEN = 4096; + char filename[MAX_FILENAME_LEN]; char *msg; - strcpy (filename, line + prefix_len); + if (g_strlcpy (filename, line + prefix_len, MAX_FILENAME_LEN) >= (gsize) MAX_FILENAME_LEN) { + return; + } msg = g_strdup_printf (message_format, filename, NULL); fr_archive_message (archive, msg); diff --git a/src/fr-command-rar.c b/src/fr-command-rar.c index 1007424e..3be42684 100644 --- a/src/fr-command-rar.c +++ b/src/fr-command-rar.c @@ -476,12 +476,15 @@ parse_progress_line (FrCommand *comm, fr_archive_progress (archive, fr_archive_progress_inc_completed_files (archive, 1)); } else { - char filename[4096]; + const int MAX_FILENAME_LEN = 4096; + char filename[MAX_FILENAME_LEN]; char *b_idx; int len; char *msg; - strcpy (filename, line + prefix_len); + if (g_strlcpy (filename, line + prefix_len, MAX_FILENAME_LEN) >= (gsize) MAX_FILENAME_LEN) { + return; + } /* when a new volume is created a sequence of backspaces is * issued, remove the backspaces from the filename */ -- GitLab