diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-23 13:41:26 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-23 13:41:26 +0200 |
commit | 378aeb86854a0e244b2f1528694b595660b7d533 (patch) | |
tree | a107f80040fe7cdd4132bb8194edef95f87fae10 | |
parent | 531005d5e7eec35db0d063833c6d297cc9bdf1a6 (diff) | |
parent | 71ce7d32eaa2e6e55ddde55c729a046af81e7a0f (diff) | |
download | php-git-378aeb86854a0e244b2f1528694b595660b7d533.tar.gz |
Merge branch 'PHP-7.4'
-rw-r--r-- | Zend/zend_arena.h | 11 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_result.c | 5 |
2 files changed, 14 insertions, 2 deletions
diff --git a/Zend/zend_arena.h b/Zend/zend_arena.h index a27d00d345..a469616592 100644 --- a/Zend/zend_arena.h +++ b/Zend/zend_arena.h @@ -110,4 +110,15 @@ static zend_always_inline void zend_arena_release(zend_arena **arena_ptr, void * arena->ptr = (char*)checkpoint; } +static zend_always_inline zend_bool zend_arena_contains(zend_arena *arena, void *ptr) +{ + while (arena) { + if ((char*)ptr > (char*)arena && (char*)ptr <= arena->ptr) { + return 1; + } + arena = arena->prev; + } + return 0; +} + #endif /* _ZEND_ARENA_H_ */ diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index c87f393e5e..3f3630de7f 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -294,13 +294,14 @@ void MYSQLND_METHOD(mysqlnd_res, free_result_contents_internal)(MYSQLND_RES * re { DBG_ENTER("mysqlnd_res::free_result_contents_internal"); - result->m.free_result_buffers(result); - if (result->meta) { + ZEND_ASSERT(zend_arena_contains(result->memory_pool->arena, result->meta)); result->meta->m->free_metadata(result->meta); result->meta = NULL; } + result->m.free_result_buffers(result); + DBG_VOID_RETURN; } /* }}} */ |