@@ -808,7 +808,7 @@ PHPAPI void redis_string_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis
808808 }
809809 } else {
810810 if (redis_unserialize (redis_sock , response , response_len , & return_value TSRMLS_CC ) == 0 ) {
811- RETURN_STRINGL (response , response_len , 0 );
811+ RETURN_STRINGL (response , response_len , 0 );
812812 } else {
813813 efree (response );
814814 }
@@ -1367,7 +1367,7 @@ PHPAPI int
13671367redis_unserialize (RedisSock * redis_sock , const char * val , int val_len , zval * * return_value TSRMLS_DC ) {
13681368
13691369 php_unserialize_data_t var_hash ;
1370- int ret ;
1370+ int ret , rv_free = 0 ;
13711371
13721372 switch (redis_sock -> serializer ) {
13731373 case REDIS_SERIALIZER_NONE :
@@ -1376,6 +1376,7 @@ redis_unserialize(RedisSock *redis_sock, const char *val, int val_len, zval **re
13761376 case REDIS_SERIALIZER_PHP :
13771377 if (!* return_value ) {
13781378 MAKE_STD_ZVAL (* return_value );
1379+ rv_free = 1 ;
13791380 }
13801381#if ZEND_MODULE_API_NO >= 20100000
13811382 PHP_VAR_UNSERIALIZE_INIT (var_hash );
@@ -1384,7 +1385,7 @@ redis_unserialize(RedisSock *redis_sock, const char *val, int val_len, zval **re
13841385#endif
13851386 if (!php_var_unserialize (return_value , (const unsigned char * * )& val ,
13861387 (const unsigned char * )val + val_len , & var_hash TSRMLS_CC )) {
1387- efree (* return_value );
1388+ if ( rv_free == 1 ) efree (* return_value );
13881389 ret = 0 ;
13891390 } else {
13901391 ret = 1 ;
0 commit comments