]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10043: [libks] ks_pool_resize error #resolve
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 15 Feb 2017 02:48:54 +0000 (20:48 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 15 Feb 2017 02:48:54 +0000 (20:48 -0600)
libs/libks/src/ks_pool.c
libs/libks/test/testpools.c

index 8b18ea0cbbcc2d54c0dacbbc0db36f8c2047a9e5..b79a95b18bcba530534eecf04c1054bec37b97c6 100644 (file)
@@ -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);
index 1cb77f1271f915f410c034310dd1622728bbb1d8..7edf716308ecdd1ee3e1e29c551041a378f8e26d 100644 (file)
@@ -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);