@@ -937,7 +937,7 @@ PHPAPI void redis_string_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis
937937 }
938938 } else {
939939 if (redis_unserialize (redis_sock , response , response_len , & return_value TSRMLS_CC ) == 0 ) {
940- RETURN_STRINGL (response , response_len , 0 );
940+ RETURN_STRINGL (response , response_len , 0 );
941941 } else {
942942 efree (response );
943943 }
@@ -1497,7 +1497,7 @@ PHPAPI int
14971497redis_unserialize (RedisSock * redis_sock , const char * val , int val_len , zval * * return_value TSRMLS_DC ) {
14981498
14991499 php_unserialize_data_t var_hash ;
1500- int ret ;
1500+ int ret , rv_free = 0 ;
15011501
15021502 switch (redis_sock -> serializer ) {
15031503 case REDIS_SERIALIZER_NONE :
@@ -1506,6 +1506,7 @@ redis_unserialize(RedisSock *redis_sock, const char *val, int val_len, zval **re
15061506 case REDIS_SERIALIZER_PHP :
15071507 if (!* return_value ) {
15081508 MAKE_STD_ZVAL (* return_value );
1509+ rv_free = 1 ;
15091510 }
15101511#if ZEND_MODULE_API_NO >= 20100000
15111512 PHP_VAR_UNSERIALIZE_INIT (var_hash );
@@ -1514,7 +1515,7 @@ redis_unserialize(RedisSock *redis_sock, const char *val, int val_len, zval **re
15141515#endif
15151516 if (!php_var_unserialize (return_value , (const unsigned char * * )& val ,
15161517 (const unsigned char * )val + val_len , & var_hash TSRMLS_CC )) {
1517- efree (* return_value );
1518+ if ( rv_free == 1 ) efree (* return_value );
15181519 ret = 0 ;
15191520 } else {
15201521 ret = 1 ;
0 commit comments