diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2017-02-12 23:02:34 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2017-02-13 07:54:25 +0100 |
commit | 09e6818d01eaa14cbce7bac12abe521c46d92893 (patch) | |
tree | 93e6ec061f6479b168321e92f5dba5eb1d35860a | |
parent | a76cebe116ec2663ee1ee5dabc28f59477ce7993 (diff) | |
download | vala-09e6818d01eaa14cbce7bac12abe521c46d92893.tar.gz |
gdbus: Ensure extracted data from the GVariant is freed on error
This will make extracted variables properly freed when extracting those
fails at some point.
https://bugzilla.gnome.org/show_bug.cgi?id=778540
-rw-r--r-- | codegen/valagdbusservermodule.vala | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala index 4a20a2d92..0df78c24c 100644 --- a/codegen/valagdbusservermodule.vala +++ b/codegen/valagdbusservermodule.vala @@ -23,6 +23,7 @@ public class Vala.GDBusServerModule : GDBusClientModule { string generate_dbus_wrapper (Method m, ObjectTypeSymbol sym, bool ready = false) { string wrapper_name = "_dbus_%s".printf (get_ccode_name (m)); + bool need_goto_label = false; if (m.base_method != null) { m = m.base_method; @@ -142,7 +143,8 @@ public class Vala.GDBusServerModule : GDBusClientModule { return_error.add_argument (new CCodeIdentifier ("error")); ccode.add_expression (return_error); - ccode.add_return (); + ccode.add_goto ("_error"); + need_goto_label = true; ccode.close (); } @@ -338,6 +340,10 @@ public class Vala.GDBusServerModule : GDBusClientModule { ccode.add_expression (ccall); } + if (need_goto_label) { + ccode.add_label ("_error"); + } + foreach (Parameter param in m.get_parameters ()) { if ((param.direction == ParameterDirection.IN && !ready) || (param.direction == ParameterDirection.OUT && !no_reply && (!m.coroutine || ready))) { |