From 6fbc421b96d6b3cd3fab9aac7257fe54c073dc35 Mon Sep 17 00:00:00 2001 From: Daniele Alessandri Date: Tue, 12 Nov 2013 12:46:45 +0100 Subject: [PATCH] Fix URI parsing on multiple equal signs in pair value of query string. --- lib/Predis/Connection/ConnectionParameters.php | 2 +- .../Connection/ConnectionParametersTest.php | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/Predis/Connection/ConnectionParameters.php b/lib/Predis/Connection/ConnectionParameters.php index 87f8043f..8cbbe2b8 100644 --- a/lib/Predis/Connection/ConnectionParameters.php +++ b/lib/Predis/Connection/ConnectionParameters.php @@ -119,7 +119,7 @@ class ConnectionParameters implements ConnectionParametersInterface if (isset($parsed['query'])) { foreach (explode('&', $parsed['query']) as $kv) { - $kv = explode('=', $kv); + $kv = explode('=', $kv, 2); if (isset($kv[0], $kv[1])) { $parsed[$kv[0]] = $kv[1]; } diff --git a/tests/Predis/Connection/ConnectionParametersTest.php b/tests/Predis/Connection/ConnectionParametersTest.php index 37987767..808c0854 100644 --- a/tests/Predis/Connection/ConnectionParametersTest.php +++ b/tests/Predis/Connection/ConnectionParametersTest.php @@ -174,6 +174,23 @@ class ParametersTest extends StandardTestCase $this->assertSame($expected, ConnectionParameters::parse($uri)); } + /** + * @group disconnected + */ + public function testParsingURIWithMoreThanOneEqualSignInQueryStringPairValue() + { + $uri = 'tcp://10.10.10.10?foobar=a=b=c&persistent=1'; + + $expected = array( + 'scheme' => 'tcp', + 'host' => '10.10.10.10', + 'foobar' => 'a=b=c', + 'persistent' => '1', + ); + + $this->assertSame($expected, ConnectionParameters::parse($uri)); + } + /** * @group disconnected * @expectedException InvalidArgumentException