فهرست منبع

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

Daniele Alessandri 15 سال پیش
والد
کامیت
0546f74374
5فایلهای تغییر یافته به همراه17 افزوده شده و 3 حذف شده
  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