diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2022-08-21 14:59:15 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2022-08-21 14:59:39 +0300 |
commit | a471c87a3b0fe3f82879b8df0fcfeb869d03e2a2 (patch) | |
tree | a9d88ad99a5ab81ce1b55438927b4ef2d531879f /redis_session.c | |
parent | 677c9da3cbff53b74f7b26ca7dcbdf7e37e1da04 (diff) |
Issue #2141issue-2141
Fix segfault with session+tls
Diffstat (limited to 'redis_session.c')
-rw-r--r-- | redis_session.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/redis_session.c b/redis_session.c index 3e3e8816..b3b3d31f 100644 --- a/redis_session.c +++ b/redis_session.c @@ -380,7 +380,7 @@ static void lock_release(RedisSock *redis_sock, redis_session_lock_status *lock_ PS_OPEN_FUNC(redis) { php_url *url; - zval params, *context = NULL; + zval params, context, *zv; int i, j, path_len; redis_pool *pool = ecalloc(1, sizeof(*pool)); @@ -425,6 +425,7 @@ PS_OPEN_FUNC(redis) return FAILURE; } + ZVAL_NULL(&context); /* parse parameters */ if (url->query != NULL) { HashTable *ht; @@ -450,7 +451,9 @@ PS_OPEN_FUNC(redis) REDIS_CONF_STRING_STATIC(ht, "prefix", &prefix); REDIS_CONF_AUTH_STATIC(ht, "auth", &user, &pass); - context = REDIS_HASH_STR_FIND_TYPE_STATIC(ht, "stream", IS_ARRAY); + if ((zv = REDIS_HASH_STR_FIND_TYPE_STATIC(ht, "stream", IS_ARRAY)) != NULL) { + ZVAL_ZVAL(&context, zv, 1, 0); + } zval_dtor(¶ms); } @@ -492,9 +495,8 @@ PS_OPEN_FUNC(redis) persistent, persistent_id ? ZSTR_VAL(persistent_id) : NULL, retry_interval); - if (context != NULL) { - redis_sock_set_stream_context(redis_sock, context); - context = NULL; + if (Z_TYPE(context) == IS_ARRAY) { + redis_sock_set_stream_context(redis_sock, &context); } redis_pool_add(pool, redis_sock, weight, db); |