This is an automated email from the git hooks/post-receive script. intrigeri pushed a commit to branch experimental in repository libnet-dbus-perl.
commit 407b780bd63b3796034135c9c9ad3ccb17207386 Author: Daniel Collins <[email protected]> Date: Tue Mar 11 10:29:50 2014 +0000 Fix decoding of type signatures with nested arrays Net::DBus incorrectly parses type signatures containing nested arrays and throws an exception when loading the introspection data from an object which has such a structure inside a dict. --- lib/Net/DBus/Binding/Introspector.pm | 8 ++++---- t/40-introspector.t | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/Net/DBus/Binding/Introspector.pm b/lib/Net/DBus/Binding/Introspector.pm index e286c67..b5bc305 100644 --- a/lib/Net/DBus/Binding/Introspector.pm +++ b/lib/Net/DBus/Binding/Introspector.pm @@ -770,7 +770,7 @@ sub _parse_type { while (my $type = shift @{$sig}) { if (exists $simple_type_rev_map{ord($type)}) { push @{$current}, $simple_type_rev_map{ord($type)}; - if ($current->[0] eq "array") { + while ($current->[0] eq "array") { $current = pop @cont; } } else { @@ -793,19 +793,19 @@ sub _parse_type { die "unexpected end of struct" unless $current->[0] eq "struct"; $current = pop @cont; - if ($current->[0] eq "array") { + while ($current->[0] eq "array") { $current = pop @cont; } } elsif ($type eq "}") { die "unexpected end of dict" unless $current->[0] eq "dict"; $current = pop @cont; - if ($current->[0] eq "array") { + while ($current->[0] eq "array") { $current = pop @cont; } } elsif ($type eq "v") { push @{$current}, ["variant"]; - if ($current->[0] eq "array") { + while ($current->[0] eq "array") { $current = pop @cont; } } else { diff --git a/t/40-introspector.t b/t/40-introspector.t index dd88baa..d0515e5 100644 --- a/t/40-introspector.t +++ b/t/40-introspector.t @@ -27,6 +27,10 @@ TEST_ONE: { paramnames => ["ooh"], returnnames => ["ahh", "eek"], }, + "nested" => { + params => [["dict", "string", ["array", ["array", "string"]]]], + returns => [], + }, }, signals => { "meltdown" => { @@ -62,6 +66,9 @@ TEST_ONE: { <arg type="(iy)" direction="in"/> <arg name="frob" type="i" direction="out"/> </method> + <method name="nested"> + <arg type="a{saas}" direction="in"/> + </method> <signal name="meltdown"> <arg type="i"/> <arg type="y"/> @@ -167,6 +174,9 @@ EOF <arg type="(iy)" direction="in"/> <arg name="frob" type="i" direction="out"/> </method> + <method name="nested"> + <arg type="a{saas}" direction="in"/> + </method> <signal name="meltdown"> <arg type="i"/> <arg type="y"/> -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libnet-dbus-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits
