Browse Source

Fix URI parsing on multiple equal signs in pair value of query string.

Daniele Alessandri 11 years ago
parent
commit
6fbc421b96

+ 1 - 1
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];
                 }

+ 17 - 0
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