Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2018-11-07 11:17:09 +0300
committerPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2018-11-07 11:17:30 +0300
commit071a1d547682b927b8f658d7c1a727e6dd9286b5 (patch)
tree1980534ff20c07994d2b1ba952137f2f15517963 /redis_session.c
parent92f14b1480b73333db595821f8335ea5ee300113 (diff)
Fix memory leak when aquiring lock
Diffstat (limited to 'redis_session.c')
-rw-r--r--redis_session.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/redis_session.c b/redis_session.c
index 79225071..71b66b5b 100644
--- a/redis_session.c
+++ b/redis_session.c
@@ -275,6 +275,7 @@ static int lock_acquire(RedisSock *redis_sock, redis_session_lock_status *lock_s
}
/* Generate our qualified lock key */
+ if (lock_status->lock_key) zend_string_release(lock_status->lock_key);
lock_status->lock_key = zend_string_alloc(ZSTR_LEN(lock_status->session_key) + sizeof(suffix) - 1, 0);
memcpy(ZSTR_VAL(lock_status->lock_key), ZSTR_VAL(lock_status->session_key), ZSTR_LEN(lock_status->session_key));
memcpy(ZSTR_VAL(lock_status->lock_key) + ZSTR_LEN(lock_status->session_key), suffix, sizeof(suffix) - 1);
@@ -283,6 +284,7 @@ static int lock_acquire(RedisSock *redis_sock, redis_session_lock_status *lock_s
gethostname(hostname, HOST_NAME_MAX);
size_t hostname_len = strlen(hostname);
size_t pid_len = snprintf(pid, sizeof(pid), "|%ld", (long)getpid());
+ if (lock_status->lock_secret) zend_string_release(lock_status->lock_secret);
lock_status->lock_secret = zend_string_alloc(hostname_len + pid_len, 0);
memcpy(ZSTR_VAL(lock_status->lock_secret), hostname, hostname_len);
memcpy(ZSTR_VAL(lock_status->lock_secret) + hostname_len, pid, pid_len);