From 00210aad87d90c4076d6c36496a2b40024181a07 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Thu, 31 Oct 2019 13:35:58 +0000 Subject: [PATCH] goption: Relax assertion to avoid being broken by kdeinit5 kdeinit5 overwrites argv, which in turn results in /proc/self/cmdline being overwritten. It seems that this is done in a way that does not necessarily guarantee that /proc/self/cmdline will end up NUL-terminated. However, g_file_get_contents() is documented to fill a buffer of size len + 1, where buffer[len] == '\0', even if the file's actual contents (from buffer[0] to buffer[len-1] inclusive) did not include a NUL; so we can safely relax this assertion slightly. Resolves: https://gitlab.gnome.org/GNOME/glib/issues/1923 Signed-off-by: Simon McVittie --- glib/goption.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/glib/goption.c b/glib/goption.c index 587eb1fb4..b0fb80c94 100644 --- a/glib/goption.c +++ b/glib/goption.c @@ -1833,8 +1833,10 @@ platform_get_argv0 (void) NULL)) return NULL; - /* Sanity check for a NUL terminator. */ - g_assert (memchr (cmdline, 0, len)); + /* g_file_get_contents() guarantees to put a NUL immediately after the + * file's contents (at cmdline[len] here), even if the file itself was + * not NUL-terminated. */ + g_assert (memchr (cmdline, 0, len + 1)); /* We could just return cmdline, but I think it's better * to hold on to a smaller malloc block; the arguments