[glib: 1/2] gio-tool: Fix a minor memory leak when using gio-set with bytestrings




commit 49cc9b96f4c19a98ddf6e9b7417c7019ebc28ca3
Author: Philip Withnall <pwithnall endlessos org>
Date:   Wed Apr 27 15:01:08 2022 +0100

    gio-tool: Fix a minor memory leak when using gio-set with bytestrings
    
    Tested using:
    ```sh
    touch ~/foo
    gio set ~/foo -t bytestring user::test "\x00\x00"
    ```
    (it doesn’t matter that this fails; the bytestring is still decoded)
    
    Signed-off-by: Philip Withnall <pwithnall endlessos org>
    
    Coverity CID: #1474407

 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;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]