fix crash when using string arrays in parameters of D-Bus methods, fixes
authorJuerg Billeter <j@bitron.ch>
Sun, 6 Apr 2008 19:24:58 +0000 (19:24 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 6 Apr 2008 19:24:58 +0000 (19:24 +0000)
2008-04-06  Juerg Billeter  <j@bitron.ch>

* gobject/valaccodegeneratorinvocationexpression.vala: fix crash
  when using string arrays in parameters of D-Bus methods,
  fixes bug 525166

svn path=/trunk/; revision=1167

ChangeLog
gobject/valaccodegeneratorinvocationexpression.vala

index a90f5be..8c3b47f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2008-04-06  Jürg Billeter  <j@bitron.ch>
 
+       * gobject/valaccodegeneratorinvocationexpression.vala: fix crash
+         when using string arrays in parameters of D-Bus methods,
+         fixes bug 525166
+
+2008-04-06  Jürg Billeter  <j@bitron.ch>
+
        * gobject/valaccodegenerator.vala,
          gobject/valaccodegeneratorclass.vala,
          gobject/valaccodegeneratorinterface.vala,
index 97d952a..349766e 100644 (file)
@@ -174,14 +174,16 @@ public class Vala.CCodeGenerator {
                                                var cdecl = new CCodeDeclaration (param.type_reference.get_cname ());
                                                cdecl.add_declarator (new CCodeVariableDeclarator (param.name));
                                                cb_fun.block.add_statement (cdecl);
-                                               cend_call.add_argument (new CCodeIdentifier (param.type_reference.data_type.get_type_id ()));
-                                               cend_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (param.name)));
                                                if (param.type_reference is ArrayType && ((ArrayType) param.type_reference).element_type.data_type == string_type.data_type) {
                                                        // special case string array
+                                                       cend_call.add_argument (new CCodeIdentifier ("G_TYPE_STRV"));
                                                        var cstrvlen = new CCodeFunctionCall (new CCodeIdentifier ("g_strv_length"));
                                                        cstrvlen.add_argument (new CCodeIdentifier (param.name));
                                                        creply_call.add_argument (cstrvlen);
+                                               } else {
+                                                       cend_call.add_argument (new CCodeIdentifier (param.type_reference.data_type.get_type_id ()));
                                                }
+                                               cend_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (param.name)));
                                                creply_call.add_argument (new CCodeIdentifier (param.name));
                                        }
                                }