After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 565865 - Crash when using stacked arrays in D-Bus server
Crash when using stacked arrays in D-Bus server
Status: RESOLVED FIXED
Product: vala
Classification: Core
Component: D-Bus
unspecified
Other All
: Normal normal
: ---
Assigned To: Vala maintainers
Vala maintainers
Depends on:
Blocks:
 
 
Reported: 2008-12-28 14:17 UTC by Philip Van Hoof
Modified: 2010-10-16 13:40 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Philip Van Hoof 2008-12-28 14:17:19 UTC
pvanhoof@tinc:~$ cat xesam2.vala
using GLib;

/* 
public struct QueryHint {
	string query;
	Value value;
}
*/

[DBus (name = "org.freedesktop.xesam.Searcher")]
public class Searcher : Object {

	public void NewSearch (DBus.ObjectPath search_object_path, /* QueryHint[] query_hints, */ string query_xml, string[] fields_to_monitor, uint offset, uint count, bool is_live, DBus.ObjectPath search_to_close, out uint hit_count, out string[] field_map, out Value[][] hit_data) {
	}

	public void NewSearchBySortKey (DBus.ObjectPath search_object_path, /* QueryHint[] query_hints, */ string query_xml, string[] fields_to_monitor, char[] start_sortkey, char[] end_sortkey, uint offset, uint count, bool is_live, DBus.ObjectPath search_to_close, out uint hit_count, out string[] field_map, out Value[][] hit_data) {
	}
}

[DBus (name = "org.freedesktop.xesam.Search")]
public class Search : Object {

	signal void HitsAdded (out Value[][] hits);
	signal void HitsModified (out Value[][] oldhits);
	signal void HitsRemoved (out Value[][] hits);

	public void GetHits (uint offset, uint count, out Value[][] hits) {
	}

	public void GetHitsBySortKey (char[] start_sortkey, char[] end_sortkey, uint offset, uint count, out Value[][] hits) {
	}

	public void Close () {
	}
}

void main () {
	var loop = new MainLoop (null, false);

	try {
		var conn = DBus.Bus.get (DBus.BusType. SESSION);
		dynamic DBus.Object bus = conn.get_object ("org.freedesktop.DBus",
							   "/org/freedesktop/DBus",
							   "org.freedesktop.DBus");       
		uint request_name_result = bus.request_name ("org.freedesktop.xesam", (uint) 0);

		if (request_name_result == DBus.RequestNameReply.PRIMARY_OWNER) {
			dynamic DBus.Object dbus_searcher;
			DBus.ObjectPath path;
			string [] fields = new string[0];
			/* QueryHint[] hints = new QueryHint[0]; */
			string [] field_map;
			Value[][] hit_data;
			uint hit_count;
			var searcher = new Searcher ();
			var search = new Search ();

			path = new DBus.ObjectPath ("/my/application/xesam/Search");

			conn.register_object ("/org/freedesktop/xesam/Searcher", searcher);
			conn.register_object (path, search);

			dbus_searcher = conn.get_object ("org.freedesktop.xesam",
							 "/org/freedesktop/xesam/Searcher",
							 "org.freedesktop.xesam.Searcher");

			dbus_searcher.NewSearch (path, /* hints, */ "query", fields, 0, 0, false, path, out hit_count, out field_map, out hit_data);

			loop.run ();
	        }
	} catch (Error e) {
		stderr.printf ("Oops: %s\n", e.message);
	}
}
pvanhoof@tinc:~$ 


pvanhoof@tinc:~$ gdb /opt/vala/bin/valac 
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(gdb) set args --pkg dbus-glib-1 -o dbustest ./xesam2.vala
(gdb) run
Starting program: /opt/vala/bin/valac --pkg dbus-glib-1 -o dbustest ./xesam2.vala

** (valac:4689): CRITICAL **: vala_ccode_binary_expression_construct: assertion `r != NULL' failed

** (valac:4689): CRITICAL **: vala_ccode_binary_expression_construct: assertion `r != NULL' failed

** (valac:4689): CRITICAL **: vala_ccode_binary_expression_construct: assertion `r != NULL' failed

** (valac:4689): CRITICAL **: vala_ccode_binary_expression_construct: assertion `r != NULL' failed

Program received signal SIGSEGV, Segmentation fault.
vala_typesymbol_get_type_id (self=0x0) at valatypesymbol.c:261
261		return VALA_TYPESYMBOL_GET_CLASS (self)->get_type_id (self);
(gdb) bt
  • #0 vala_typesymbol_get_type_id
    at valatypesymbol.c line 261
  • #1 vala_dbus_client_module_real_generate_dynamic_method_wrapper
    at valadbusclientmodule.c line 1182
  • #2 vala_ccode_module_generate_dynamic_method_wrapper
    at valaccodemodule.c line 1043
  • #3 vala_ccode_method_call_module_real_visit_method_call
    at valaccodemethodcallmodule.c line 656
  • #4 vala_ccode_array_module_real_visit_method_call
    at valaccodearraymodule.c line 1356
  • #5 vala_dbus_server_module_real_visit_method_call
    at valadbusservermodule.c line 3937
  • #6 vala_ccode_module_visit_method_call
    at valaccodemodule.c line 824
  • #7 vala_ccode_generator_real_visit_method_call
    at valaccodegenerator.c line 586
  • #8 vala_code_visitor_visit_method_call
    at valacodevisitor.c line 1111
  • #9 vala_method_call_real_accept
    at valamethodcall.c line 154
  • #10 vala_code_node_accept
    at valacodenode.c line 151
  • #11 vala_expression_statement_real_accept_children
    at valaexpressionstatement.c line 90
  • #12 vala_code_node_accept_children
    at valacodenode.c line 167
  • #13 vala_ccode_base_module_real_visit_expression_statement
    at valaccodebasemodule.c line 4784
  • #14 vala_ccode_module_visit_expression_statement
    at valaccodemodule.c line 488
  • #15 vala_ccode_generator_real_visit_expression_statement
    at valaccodegenerator.c line 362
  • #16 vala_code_visitor_visit_expression_statement
    at valacodevisitor.c line 663
  • #17 vala_expression_statement_real_accept
    at valaexpressionstatement.c line 82
  • #18 vala_code_node_accept
    at valacodenode.c line 151
  • #19 vala_block_real_accept_children
    at valablock.c line 216
  • #20 vala_code_node_accept_children
    at valacodenode.c line 167
  • #21 vala_ccode_base_module_real_visit_block
    at valaccodebasemodule.c line 3191
  • #22 vala_ccode_module_visit_block
    at valaccodemodule.c line 416
  • #23 vala_ccode_generator_real_visit_block
    at valaccodegenerator.c line 314
  • #24 vala_code_visitor_visit_block
    at valacodevisitor.c line 583
  • #25 vala_block_real_accept
    at valablock.c line 202
  • #26 vala_code_node_accept
    at valacodenode.c line 151
  • #27 vala_if_statement_real_accept_children
    at valaifstatement.c line 98
  • #28 vala_code_node_accept_children
    at valacodenode.c line 167
  • #29 vala_ccode_control_flow_module_real_visit_if_statement
    at valaccodecontrolflowmodule.c line 114
  • #30 vala_ccode_module_visit_if_statement
    at valaccodemodule.c line 500
  • #31 vala_ccode_generator_real_visit_if_statement
    at valaccodegenerator.c line 370
  • #32 vala_code_visitor_visit_if_statement
    at valacodevisitor.c line 679
  • #33 vala_if_statement_real_accept
    at valaifstatement.c line 88
  • #34 vala_code_node_accept
    at valacodenode.c line 151
  • #35 vala_block_real_accept_children
    at valablock.c line 216
  • #36 vala_code_node_accept_children
    at valacodenode.c line 167
  • #37 vala_ccode_base_module_real_visit_block
    at valaccodebasemodule.c line 3191
  • #38 vala_ccode_module_visit_block
    at valaccodemodule.c line 416
  • #39 vala_ccode_generator_real_visit_block
    at valaccodegenerator.c line 314
  • #40 vala_code_visitor_visit_block
    at valacodevisitor.c line 583
  • #41 vala_block_real_accept
    at valablock.c line 202
  • #42 vala_code_node_accept
    at valacodenode.c line 151
  • #43 vala_gerror_module_real_visit_try_statement
    at valagerrormodule.c line 498
  • #44 vala_ccode_module_visit_try_statement
    at valaccodemodule.c line 656
  • #45 vala_ccode_generator_real_visit_try_statement
    at valaccodegenerator.c line 474
  • #46 vala_code_visitor_visit_try_statement
    at valacodevisitor.c line 887
  • #47 vala_try_statement_real_accept
    at valatrystatement.c line 108
  • #48 vala_code_node_accept
    at valacodenode.c line 151
  • #49 vala_block_real_accept_children
    at valablock.c line 216
  • #50 vala_code_node_accept_children
    at valacodenode.c line 167
  • #51 vala_ccode_base_module_real_visit_block
    at valaccodebasemodule.c line 3191
  • #52 vala_ccode_module_visit_block
    at valaccodemodule.c line 416
  • #53 vala_ccode_generator_real_visit_block
    at valaccodegenerator.c line 314
  • #54 vala_code_visitor_visit_block
    at valacodevisitor.c line 583
  • #55 vala_block_real_accept
    at valablock.c line 202
  • #56 vala_code_node_accept
    at valacodenode.c line 151
  • #57 vala_method_real_accept_children
    at valamethod.c line 257
  • #58 vala_code_node_accept_children
    at valacodenode.c line 167
  • #59 vala_ccode_method_module_real_visit_method
    at valaccodemethodmodule.c line 290
  • #60 vala_gasync_module_real_visit_method
    at valagasyncmodule.c line 161
  • #61 vala_ccode_module_visit_method
    at valaccodemodule.c line 320
  • #62 vala_ccode_generator_real_visit_method
    at valaccodegenerator.c line 250
  • #63 vala_code_visitor_visit_method
    at valacodevisitor.c line 407
  • #64 vala_method_real_accept
    at valamethod.c line 194
  • #65 vala_code_node_accept
    at valacodenode.c line 151
  • #66 vala_source_file_accept_children
    at valasourcefile.c line 286
  • #67 vala_ccode_base_module_real_visit_source_file
    at valaccodebasemodule.c line 778
  • #68 vala_ccode_module_visit_source_file
    at valaccodemodule.c line 176
  • #69 vala_ccode_generator_real_visit_source_file
    at valaccodegenerator.c line 154
  • #70 vala_code_visitor_visit_source_file
    at valacodevisitor.c line 199
  • #71 vala_source_file_accept
    at valasourcefile.c line 262
  • #72 vala_ccode_base_module_real_emit
    at valaccodebasemodule.c line 1370
  • #73 vala_ccode_module_emit
    at valaccodemodule.c line 164
  • #74 vala_ccode_generator_real_emit
    at valaccodegenerator.c line 146
  • #75 vala_code_generator_emit
    at valacodegenerator.c line 49
  • #76 vala_compiler_main
    at valacompiler.c line 505
  • #77 main
    at valacompiler.c line 773

Comment 1 Jürg Billeter 2009-01-09 22:44:08 UTC
Confirming, stacked array issue.
Comment 2 Jürg Billeter 2010-10-16 13:40:12 UTC
commit cc435dd6ec069b87e986fa454e80e5fe80a0df72
Author: Jürg Billeter <j@bitron.ch>
Date:   Sat Oct 16 15:17:23 2010 +0200

    Report error when trying to use stacked arrays
    
    Stacked array support was never completed. Report an error instead of
    generating incorrect C code.
    
    Fixes bug 546603, bug 548428, bug 548429, bug 565865, bug 565872,
    bug 571322, bug 572649, and bug 576611.