Package: libdbus-ruby Version: 0.2.0-1 Severity: wishlist Tags: patch This version of the Ruby DBus bindings throws a NotImplementedError when trying to parse dictionaries (arrays of dict_entries), presumably because it isn't implemented. A patch is attached which attempts to implement this. Note that it does not check for dict_entries being necessarily part of arrays, and I have not checked to see whether other code checks for this. At worst, a stray dict_entry that violates the D-Bus specification may be deserialized as a two-element array instead of as a dictionary.
---> Drake Wilson -- System Information: Debian Release: lenny/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 2.6.22.2 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages libdbus-ruby depends on: ii libdbus-ruby1.8 0.2.0-1 Ruby 1.8 binding for D-Bus libdbus-ruby recommends no packages. -- no debconf information
diff -ur libdbus-ruby-0.2.0/lib/dbus/marshall.rb libdbus-ruby-new/lib/dbus/marshall.rb --- libdbus-ruby-0.2.0/lib/dbus/marshall.rb 2007-05-26 06:43:50.000000000 -0500 +++ libdbus-ruby-new/lib/dbus/marshall.rb 2007-12-16 10:15:51.000000000 -0600 @@ -195,6 +195,13 @@ while @idx - start_idx < array_sz packet << do_parse(signature.child) end + + if signature.child.sigtype == Type::DICT_ENTRY then + packet = packet.inject(Hash.new) { |hash, pair| + hash[pair[0]] = pair[1] + hash + } + end when Type::STRUCT align(8) packet = Array.new @@ -212,6 +219,11 @@ packet = get_string when Type::SIGNATURE packet = get_signature + when Type::DICT_ENTRY + align(8) + key = do_parse(signature.members[0]) + value = do_parse(signature.members[1]) + packet = [key, value] else raise NotImplementedError, "sigtype: #{signature.sigtype} (#{signature.sigtype.chr})"