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

Reply via email to