From ecb87d5a9996c52abac94035651089f4ae6db2f3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Thu, 12 Jun 2008 12:26:44 +0000 Subject: [PATCH] Fix application crash when a D-Bus client method raises an error MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-06-12 Jürg Billeter * gobject/valaccodedynamicmethodbinding.vala: Fix application crash when a D-Bus client method raises an error svn path=/trunk/; revision=1570 --- ChangeLog | 6 ++++++ gobject/valaccodedynamicmethodbinding.vala | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9b55300..f1d9efc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,12 @@ * gobject/valaccodedynamicmethodbinding.vala: + Fix application crash when a D-Bus client method raises an error + +2008-06-12 Jürg Billeter + + * gobject/valaccodedynamicmethodbinding.vala: + Fix gcc warning for D-Bus client methods returning arrays 2008-06-11 Jürg Billeter diff --git a/gobject/valaccodedynamicmethodbinding.vala b/gobject/valaccodedynamicmethodbinding.vala index f942de6..366c006 100644 --- a/gobject/valaccodedynamicmethodbinding.vala +++ b/gobject/valaccodedynamicmethodbinding.vala @@ -344,6 +344,12 @@ public class Vala.CCodeDynamicMethodBinding : CCodeMethodBinding { block.add_statement (new CCodeExpressionStatement (ccall)); + // don't access result when error occured + var creturnblock = new CCodeBlock (); + creturnblock.add_statement (new CCodeReturnStatement (codegen.default_value_for_type (method.return_type, false))); + var cerrorif = new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("error")), creturnblock); + block.add_statement (cerrorif); + block.add_statement (out_marshalling_fragment); // *result_length1 = result->len; @@ -374,6 +380,12 @@ public class Vala.CCodeDynamicMethodBinding : CCodeMethodBinding { block.add_statement (new CCodeExpressionStatement (ccall)); + // don't access result when error occured + var creturnblock = new CCodeBlock (); + creturnblock.add_statement (new CCodeReturnStatement (codegen.default_value_for_type (method.return_type, false))); + var cerrorif = new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("error")), creturnblock); + block.add_statement (cerrorif); + block.add_statement (out_marshalling_fragment); if (array_type != null) { @@ -392,6 +404,12 @@ public class Vala.CCodeDynamicMethodBinding : CCodeMethodBinding { } else { block.add_statement (new CCodeExpressionStatement (ccall)); + // don't access result when error occured + var creturnblock = new CCodeBlock (); + creturnblock.add_statement (new CCodeReturnStatement ()); + var cerrorif = new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("error")), creturnblock); + block.add_statement (cerrorif); + block.add_statement (out_marshalling_fragment); } } -- 2.7.4