diff options
author | djcb <djcb@djcbsoftware.nl> | 2013-11-28 08:25:20 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2013-11-28 08:25:20 -0500 |
commit | 49fc6d5b7e0714e783565f083aaca1de598256c0 (patch) | |
tree | 21b2d04962afe37be6cc94685f126166ddd1721b | |
parent | 7d82d6dc5b7de75672d4875b2a897b9a29836f32 (diff) | |
download | glib-49fc6d5b7e0714e783565f083aaca1de598256c0.tar.gz |
gdbus-codegen: Fix leak in property setter
Comparing the code generated for the setter and other methods without
(real) return value, I noticed that the setter does not unref the
gvariant it gets.
https://bugzilla.gnome.org/show_bug.cgi?id=719472
-rw-r--r-- | gio/gdbus-2.0/codegen/codegen.py | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gio/gdbus-2.0/codegen/codegen.py b/gio/gdbus-2.0/codegen/codegen.py index 82e57872b..e72cb317e 100644 --- a/gio/gdbus-2.0/codegen/codegen.py +++ b/gio/gdbus-2.0/codegen/codegen.py @@ -1629,14 +1629,20 @@ class CodeGenerator: '{\n'%(i.name_lower)) self.c.write(' const _ExtendedGDBusPropertyInfo *info = user_data;\n' ' GError *error;\n' + ' GVariant *_ret;\n' ' error = NULL;\n' - ' if (!g_dbus_proxy_call_finish (proxy, res, &error))\n' + ' _ret = g_dbus_proxy_call_finish (proxy, res, &error);\n' + ' if (!_ret)\n' ' {\n' ' g_warning ("Error setting property \'%%s\' on interface %s: %%s (%%s, %%d)",\n' ' info->parent_struct.name, \n' ' error->message, g_quark_to_string (error->domain), error->code);\n' ' g_error_free (error);\n' ' }\n' + ' else\n' + ' {\n' + ' g_variant_unref (_ret);\n' + ' }\n' %(i.name)) self.c.write('}\n' '\n') |