Skip to content

Commit f3a3fce

Browse files
Merge branch 'hotfix/serializer_leak'
2 parents 5e5fa78 + a4627bb commit f3a3fce

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

library.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
13671367
redis_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

Comments
 (0)