diff options
author | Dmitri Smirnov <dmitrism@microsoft.com> | 2016-02-29 22:30:19 (GMT) |
---|---|---|
committer | Jason Evans <jasone@canonware.com> | 2016-05-03 17:01:47 (GMT) |
commit | c3ab90483fc78a744a07f9d5e77888454e4c5f99 (patch) | |
tree | 3447b8588a9238f4d94149d9ae776498323635ea | |
parent | 7798c7ac1d0b165861433cc1fb045c6a9dc88f69 (diff) | |
download | jemalloc-c3ab90483fc78a744a07f9d5e77888454e4c5f99.zip jemalloc-c3ab90483fc78a744a07f9d5e77888454e4c5f99.tar.gz jemalloc-c3ab90483fc78a744a07f9d5e77888454e4c5f99.tar.bz2 |
Fix stack corruption and uninitialized var warning
Stack corruption happens in x64 bit
This resolves #347.
-rw-r--r-- | src/arena.c | 2 | ||||
-rw-r--r-- | test/unit/hash.c | 13 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/arena.c b/src/arena.c index 99e20fd..965c0fe 100644 --- a/src/arena.c +++ b/src/arena.c @@ -2423,7 +2423,7 @@ arena_malloc_large(tsd_t *tsd, arena_t *arena, szind_t binind, bool zero) uintptr_t random_offset; arena_run_t *run; arena_chunk_map_misc_t *miscelm; - UNUSED bool idump; + UNUSED bool idump JEMALLOC_CC_SILENCE_INIT(false); /* Large allocation. */ usize = index2size(binind); diff --git a/test/unit/hash.c b/test/unit/hash.c index f50ba81..010c9d7 100644 --- a/test/unit/hash.c +++ b/test/unit/hash.c @@ -64,14 +64,15 @@ static void hash_variant_verify_key(hash_variant_t variant, uint8_t *key) { const int hashbytes = hash_variant_bits(variant) / 8; - VARIABLE_ARRAY(uint8_t, hashes, hashbytes * 256); + const int hashes_size = hashbytes * 256; + VARIABLE_ARRAY(uint8_t, hashes, hashes_size); VARIABLE_ARRAY(uint8_t, final, hashbytes); unsigned i; uint32_t computed, expected; memset(key, 0, KEY_SIZE); - memset(hashes, 0, sizeof(hashes)); - memset(final, 0, sizeof(final)); + memset(hashes, 0, hashes_size); + memset(final, 0, hashbytes); /* * Hash keys of the form {0}, {0,1}, {0,1,2}, ..., {0,1,...,255} as the @@ -102,17 +103,17 @@ hash_variant_verify_key(hash_variant_t variant, uint8_t *key) /* Hash the result array. */ switch (variant) { case hash_variant_x86_32: { - uint32_t out = hash_x86_32(hashes, hashbytes*256, 0); + uint32_t out = hash_x86_32(hashes, hashes_size, 0); memcpy(final, &out, sizeof(out)); break; } case hash_variant_x86_128: { uint64_t out[2]; - hash_x86_128(hashes, hashbytes*256, 0, out); + hash_x86_128(hashes, hashes_size, 0, out); memcpy(final, out, sizeof(out)); break; } case hash_variant_x64_128: { uint64_t out[2]; - hash_x64_128(hashes, hashbytes*256, 0, out); + hash_x64_128(hashes, hashes_size, 0, out); memcpy(final, out, sizeof(out)); break; } default: not_reached(); |