implement get_type_id
authorJuerg Billeter <j@bitron.ch>
Sun, 13 Apr 2008 11:52:43 +0000 (11:52 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 13 Apr 2008 11:52:43 +0000 (11:52 +0000)
2008-04-13  Juerg Billeter  <j@bitron.ch>

* vala/valaerrortype.vala: implement get_type_id

* gobject/valaccodeassignmentbinding.vala: don't crash when using
  unsupported parameter types in D-Bus signal handlers

Fixes bug 527027

svn path=/trunk/; revision=1200

ChangeLog
gobject/valaccodeassignmentbinding.vala
vala/valaerrortype.vala

index 1f06741..0c52663 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2008-04-13  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valaerrortype.vala: implement get_type_id
+
+       * gobject/valaccodeassignmentbinding.vala: don't crash when using
+         unsupported parameter types in D-Bus signal handlers
+
+       Fixes bug 527027
+
+2008-04-13  Jürg Billeter  <j@bitron.ch>
+
        * vala/valaparser.vala: supported declaration-only interfaces
 
 2008-04-13  Jürg Billeter  <j@bitron.ch>
index 2a4eab6..03bbdd9 100644 (file)
@@ -281,12 +281,22 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
                                }
                                if (param.type_reference is ArrayType && ((ArrayType) param.type_reference).element_type.data_type != codegen.string_type.data_type) {
                                        var array_type = (ArrayType) param.type_reference;
+                                       if (array_type.element_type.data_type.get_type_id () == null) {
+                                               Report.error (param.source_reference, "unsupported parameter type for D-Bus signals");
+                                               return;
+                                       }
+
                                        var carray_type = new CCodeFunctionCall (new CCodeIdentifier ("dbus_g_type_get_collection"));
                                        carray_type.add_argument (new CCodeConstant ("\"GArray\""));
                                        carray_type.add_argument (new CCodeIdentifier (array_type.element_type.data_type.get_type_id ()));
                                        register_call.add_argument (carray_type);
                                        add_call.add_argument (carray_type);
                                } else {
+                                       if (param.type_reference.get_type_id () == null) {
+                                               Report.error (param.source_reference, "unsupported parameter type for D-Bus signals");
+                                               return;
+                                       }
+
                                        register_call.add_argument (new CCodeIdentifier (param.type_reference.get_type_id ()));
                                        add_call.add_argument (new CCodeIdentifier (param.type_reference.get_type_id ()));
                                }
index a2cbc47..9d466a4 100644 (file)
@@ -98,4 +98,8 @@ public class Vala.ErrorType : ReferenceType {
                var gerror_symbol = root_symbol.scope.lookup ("GLib").scope.lookup ("Error");
                return gerror_symbol.scope.lookup (member_name);
        }
+
+       public override string? get_type_id () {
+               return "G_TYPE_POINTER";
+       }
 }