73 lines
1.9 KiB
Diff
73 lines
1.9 KiB
Diff
From 49cc9b96f4c19a98ddf6e9b7417c7019ebc28ca3 Mon Sep 17 00:00:00 2001
|
|
From: Philip Withnall <pwithnall@endlessos.org>
|
|
Date: Wed, 27 Apr 2022 15:01:08 +0100
|
|
Subject: [PATCH] gio-tool: Fix a minor memory leak when using gio-set with
|
|
bytestrings
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Tested using:
|
|
```sh
|
|
touch ~/foo
|
|
gio set ~/foo -t bytestring user::test "\x00\x00"
|
|
```
|
|
(it doesn鈥檛 matter that this fails; the bytestring is still decoded)
|
|
|
|
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
|
|
|
Coverity CID: #1474407
|
|
|
|
Conflict:NA
|
|
Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/49cc9b96f4c19a98ddf6e9b7417c7019ebc28ca3
|
|
|
|
---
|
|
gio/gio-tool-set.c | 10 ++++++----
|
|
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/gio/gio-tool-set.c b/gio/gio-tool-set.c
|
|
index 4dbe1214ff..c2a9431f61 100644
|
|
--- a/gio/gio-tool-set.c
|
|
+++ b/gio/gio-tool-set.c
|
|
@@ -76,12 +76,14 @@ handle_set (int argc, char *argv[], gboolean do_help)
|
|
const char *attribute;
|
|
GFileAttributeType type;
|
|
gpointer value;
|
|
+ gpointer value_allocated = NULL;
|
|
gboolean b;
|
|
guint32 uint32;
|
|
gint32 int32;
|
|
guint64 uint64;
|
|
gint64 int64;
|
|
gchar *param;
|
|
+ int retval = 0;
|
|
|
|
g_set_prgname ("gio set");
|
|
|
|
@@ -147,7 +149,7 @@ handle_set (int argc, char *argv[], gboolean do_help)
|
|
value = argv[3];
|
|
break;
|
|
case G_FILE_ATTRIBUTE_TYPE_BYTE_STRING:
|
|
- value = hex_unescape (argv[3]);
|
|
+ value = value_allocated = hex_unescape (argv[3]);
|
|
break;
|
|
case G_FILE_ATTRIBUTE_TYPE_BOOLEAN:
|
|
b = g_ascii_strcasecmp (argv[3], "true") == 0;
|
|
@@ -194,11 +196,11 @@ handle_set (int argc, char *argv[], gboolean do_help)
|
|
{
|
|
print_error ("%s", error->message);
|
|
g_error_free (error);
|
|
- g_object_unref (file);
|
|
- return 1;
|
|
+ retval = 1;
|
|
}
|
|
|
|
+ g_clear_pointer (&value_allocated, g_free);
|
|
g_object_unref (file);
|
|
|
|
- return 0;
|
|
+ return retval;
|
|
}
|
|
--
|
|
GitLab
|