diff --git a/libs/libks/src/ks_pool.c b/libs/libks/src/ks_pool.c index 8b18ea0cbb..b79a95b18b 100644 --- a/libs/libks/src/ks_pool.c +++ b/libs/libks/src/ks_pool.c @@ -1695,6 +1695,7 @@ KS_DECLARE(void *) ks_pool_resize_ex(ks_pool_t *mp_p, void *old_addr, const unsi ks_pool_block_t *block_p; int ret; alloc_prefix_t *prefix; + void *orig_old_addr = NULL; ks_assert(mp_p); //ks_assert(old_addr); @@ -1754,6 +1755,7 @@ KS_DECLARE(void *) ks_pool_resize_ex(ks_pool_t *mp_p, void *old_addr, const unsi } } + orig_old_addr = old_addr; /* move pointer to actual beginning */ old_addr = prefix; @@ -1779,12 +1781,12 @@ KS_DECLARE(void *) ks_pool_resize_ex(ks_pool_t *mp_p, void *old_addr, const unsi goto end; } - if (new_byte_size > old_byte_size) { - copy_size = old_byte_size; - } else { - copy_size = new_byte_size; + copy_size = old_byte_size; + memcpy(new_addr, orig_old_addr, copy_size); + + if (!(mp_p->mp_flags & KS_POOL_FLAG_NO_ZERO)) { + memset(((unsigned char *)new_addr) + copy_size, 0, new_byte_size - old_byte_size); } - memcpy(new_addr, old_addr, copy_size); /* free the old address */ ret = free_mem(mp_p, (uint8_t *)old_addr + PREFIX_SIZE); diff --git a/libs/libks/test/testpools.c b/libs/libks/test/testpools.c index 1cb77f1271..7edf716308 100644 --- a/libs/libks/test/testpools.c +++ b/libs/libks/test/testpools.c @@ -166,10 +166,16 @@ int main(int argc, char **argv) printf("RESIZE:\n"); + + + ks_snprintf(str, bytes, "%s", "ABCDEFGHIJKLM"); + printf("1 STR [%s]\n", str); bytes *= 2; str = ks_pool_resize(pool, str, bytes); + printf("2 STR [%s]\n", str); + + ok(!strcmp(str, "ABCDEFGHIJKLM")); - ok(str != NULL); if (!str) { fprintf(stderr, "RESIZE ERR: [FAILED]\n"); exit(255);