From c805fd3862baaa114d1cceee27cc931264894c98 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Wed, 1 May 2024 15:51:42 +0100 Subject: [PATCH 02/18] gdbusconnection: Make a backport of g_set_str() available A subsequent commit will need this. Copying all of g_set_str() into a private header seems cleaner than replacing the call to it. Helps: GNOME/glib#3268 Signed-off-by: Simon McVittie CVE: CVE-2024-34397 Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/c805fd3862baaa114d1cceee27cc931264894c98] Signed-off-by: Peter Marko --- gio/gdbusconnection.c | 1 + glib/glib-private.h | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c index 1159c2db4..82a68437b 100644 --- a/gio/gdbusconnection.c +++ b/gio/gdbusconnection.c @@ -95,6 +95,7 @@ #include #include +#include "glib-private.h" #include "gdbusauth.h" #include "gdbusutils.h" #include "gdbusaddress.h" diff --git a/glib/glib-private.h b/glib/glib-private.h index 943252f1b..f02828ff5 100644 --- a/glib/glib-private.h +++ b/glib/glib-private.h @@ -201,4 +201,22 @@ GLibPrivateVTable *glib__private__ (void); # define GLIB_DEFAULT_LOCALE "" #endif +/* Backported from GLib 2.78.x, where it is public API in gstrfuncs.h */ +static inline gboolean +g_set_str (char **str_pointer, + const char *new_str) +{ + char *copy; + + if (*str_pointer == new_str || + (*str_pointer && new_str && strcmp (*str_pointer, new_str) == 0)) + return FALSE; + + copy = g_strdup (new_str); + g_free (*str_pointer); + *str_pointer = copy; + + return TRUE; +} + #endif /* __GLIB_PRIVATE_H__ */ -- 2.30.2