From 169b5ee36fd0e4da19ab5d2d177cd93f6895d456 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 19 Oct 2018 19:36:17 +1100 Subject: [PATCH] expand the pool then copy over the old entries so we that failures do not break the old pool; also don't leak the new pool on error (cherry picked from commit afde30fe9b1fd43595290a6763db6d52e0903c5a) --- lib/isc/pool.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/isc/pool.c b/lib/isc/pool.c index a445d8b2ea..8ce79901df 100644 --- a/lib/isc/pool.c +++ b/lib/isc/pool.c @@ -133,21 +133,22 @@ isc_pool_expand(isc_pool_t **sourcep, unsigned int count, newpool->init = pool->init; newpool->initarg = pool->initarg; + /* Populate the new entries */ + for (i = pool->count; i < count; i++) { + result = newpool->init(&newpool->pool[i], + newpool->initarg); + if (result != ISC_R_SUCCESS) { + isc_pool_destroy(&newpool); + return (result); + } + } + /* Copy over the objects from the old pool */ for (i = 0; i < pool->count; i++) { newpool->pool[i] = pool->pool[i]; pool->pool[i] = NULL; } - /* Populate the new entries */ - for (i = pool->count; i < count; i++) { - result = pool->init(&newpool->pool[i], pool->initarg); - if (result != ISC_R_SUCCESS) { - isc_pool_destroy(&pool); - return (result); - } - } - isc_pool_destroy(&pool); pool = newpool; }