Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates-src > by-pkgid > 6e26c712965be7166deb1d9bef485cb1 > files > 1

perl-SOAP-Lite-0.715-3.fc17.src.rpm

From fc370b31446533cc74a03f2af3949370a07e9980 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Mon, 6 May 2013 14:22:16 +0200
Subject: [PATCH] Accept more-digit number in _traverse()

When sending a large object (many levels deep) through SOAP::Lite,
you got an error: Incorrect parameter at
/usr/lib/perl5/site_perl/5.8.8/SOAP/Lite.pm line 1993.

This fixes wrong check for a number.

Thanks to aharper[...]ecstuning.com and TONVOON[...]cpan.org.

<https://rt.cpan.org/Public/Bug/Display.html?id=78692>
---
 lib/SOAP/Lite.pm |  2 +-
 t/02-payload.t   | 11 ++++++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/lib/SOAP/Lite.pm b/lib/SOAP/Lite.pm
index 691e675..a37b27a 100644
--- a/lib/SOAP/Lite.pm
+++ b/lib/SOAP/Lite.pm
@@ -1990,7 +1990,7 @@ sub match {
 sub _traverse {
     my ($self, $pointer, $itself, $path, @path) = @_;
 
-    die "Incorrect parameter" unless $itself =~/^\d$/;
+    die "Incorrect parameter" unless $itself =~/^\d+$/;
 
     if ($path && substr($path, 0, 1) eq '{') {
         $path = join '/', $path, shift @path while @path && $path !~ /}/;
diff --git a/t/02-payload.t b/t/02-payload.t
index 6501ac1..1ab5171 100644
--- a/t/02-payload.t
+++ b/t/02-payload.t
@@ -10,7 +10,7 @@ BEGIN {
 use strict;
 use Test;
 
-BEGIN { plan tests => 131 }
+BEGIN { plan tests => 133 }
 
 use SOAP::Lite;
 $SIG{__WARN__} = sub { ; }; # turn off deprecation warnings
@@ -97,6 +97,12 @@ my($a, $s, $r, $serialized, $deserialized);
 <item2 xsi:type="xsd:int">60</item2>
 <item2 xsi:type="xsd:int">100</item2>
 <item3 xsi:type="xsd:int">200</item3>
+<item3 xsi:type="xsd:int">200</item3>
+<item4 xsi:type="xsd:int">200</item4>
+<item4 xsi:type="xsd:int">200</item4>
+<item5 xsi:type="xsd:int">400</item5>
+<item5 xsi:type="xsd:int">450</item5>
+<item6 xsi:type="xsd:int">600</item6>
 </nums>
 </m:doublerResponse>
 </soap:Body>
@@ -108,6 +114,9 @@ my($a, $s, $r, $serialized, $deserialized);
   ok($deserialized->valueof("$result/[1]") == 20);
   ok($deserialized->valueof("$result/[3]") == 60);
   ok($deserialized->valueof("$result/[5]") == 200);
+  ok($deserialized->valueof("$result/[9]") == 400);
+  # Test more than 9 items to check depth is okay - RT78692
+  ok($deserialized->valueof("$result/[11]") == 600);
 
   # match should return true/false in boolean context (and object ref otherwise)
   ok($deserialized->match('aaa') ? 0 : 1);
-- 
1.8.1.4