Browse Source

Backported changes from the mainline library to the PHP 5.2 branch (up to commit f76d616)

Daniele Alessandri 14 năm trước cách đây
mục cha
commit
0546f74374
5 tập tin đã thay đổi với 17 bổ sung3 xóa
  1. 5 0
      CHANGELOG
  2. 1 1
      VERSION
  3. 1 1
      lib/Predis.php
  4. 6 0
      test/PredisClientFeatures.php
  5. 4 1
      test/RedisCommandsTest.php

+ 5 - 0
CHANGELOG

@@ -1,3 +1,8 @@
+v0.6.5 (2011-02-12)
+  * FIX: due to an untested internal change introduced in v0.6.4, a wrong
+    handling of bulk reads of zero-length values was producing protocol
+    desynchronization errors (ISSUE #20).
+
 v0.6.4 (2011-02-12)
   * Various performance improvements (15% ~ 25%) especially when dealing with 
     long multibulk replies or when using clustered connections.

+ 1 - 1
VERSION

@@ -1 +1 @@
-0.6.4
+0.6.5

+ 1 - 1
lib/Predis.php

@@ -585,7 +585,7 @@ class Predis_ResponseBulkHandler implements Predis_IResponseHandler {
             ));
         }
         if ($length >= 0) {
-            return $length > 0 ? substr($connection->readBytes($length + 2), 0, -2) : '';
+            return substr($connection->readBytes($length + 2), 0, -2);
         }
         if ($length == -1) {
             return null;

+ 6 - 0
test/PredisClientFeatures.php

@@ -401,6 +401,12 @@ class PredisClientFeaturesTestSuite extends PHPUnit_Framework_TestCase {
         $this->assertEquals(RC::EXCEPTION_WRONG_TYPE, $thrownException->getMessage());
     }
 
+    function testResponseReader_EmptyBulkResponse() {
+        $this->assertTrue($this->redis->set('foo', ''));
+        $this->assertEquals('', $this->redis->get('foo'));
+        $this->assertEquals('', $this->redis->get('foo'));
+    }
+
 
     /* Client + CommandPipeline */
 

+ 4 - 1
test/RedisCommandsTest.php

@@ -90,8 +90,11 @@ class RedisCommandTestSuite extends PHPUnit_Framework_TestCase {
 
     function testGet() {
         $this->redis->set('foo', 'bar');
-
         $this->assertEquals('bar', $this->redis->get('foo'));
+
+        $this->assertTrue($this->redis->set('foo', ''));
+        $this->assertEquals('', $this->redis->get('foo'));
+
         $this->assertNull($this->redis->get('fooDoesNotExist'));
 
         // should throw an exception when trying to do a GET on non-string types