Backport of: From ce0eb088a68171eed3ac217cb92a72e36eb57d1b Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 10 Mar 2021 16:05:55 +0000 Subject: [PATCH 3/5] glocalfileoutputstream: Factor out a flag check This clarifies the code a little. It introduces no functional changes. Signed-off-by: Philip Withnall Upstream-Status: Backport [https://mirrors.ocf.berkeley.edu/ubuntu/pool/main/g/glib2.0/glib2.0_2.64.6-1~ubuntu20.04.3.debian.tar.xz] CVE: CVE-2021-28153 Signed-off-by: Neetika Singh Signed-off-by: Ranjitsinh Rathod --- gio/glocalfileoutputstream.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --- a/gio/glocalfileoutputstream.c +++ b/gio/glocalfileoutputstream.c @@ -847,6 +847,7 @@ handle_overwrite_open (const char *fi int res; int mode; int errsv; + gboolean replace_destination_set = (flags & G_FILE_CREATE_REPLACE_DESTINATION); mode = mode_from_flags_or_info (flags, reference_info); @@ -954,7 +955,7 @@ handle_overwrite_open (const char *fi * to a backup file and rewrite the contents of the file. */ - if ((flags & G_FILE_CREATE_REPLACE_DESTINATION) || + if (replace_destination_set || (!(original_stat.st_nlink > 1) && !is_symlink)) { char *dirname, *tmp_filename; @@ -973,7 +974,7 @@ handle_overwrite_open (const char *fi /* try to keep permissions (unless replacing) */ - if ( ! (flags & G_FILE_CREATE_REPLACE_DESTINATION) && + if (!replace_destination_set && ( #ifdef HAVE_FCHOWN fchown (tmpfd, original_stat.st_uid, original_stat.st_gid) == -1 || @@ -1112,7 +1113,7 @@ handle_overwrite_open (const char *fi } } - if (flags & G_FILE_CREATE_REPLACE_DESTINATION) + if (replace_destination_set) { g_close (fd, NULL);