summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2017-02-12 23:02:34 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2017-02-13 07:54:25 +0100
commit09e6818d01eaa14cbce7bac12abe521c46d92893 (patch)
tree93e6ec061f6479b168321e92f5dba5eb1d35860a
parenta76cebe116ec2663ee1ee5dabc28f59477ce7993 (diff)
downloadvala-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.vala8
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))) {