diff --git a/MCInst.c b/MCInst.c index cc062d00..3f75de3b 100644 --- a/MCInst.c +++ b/MCInst.c @@ -16,15 +16,7 @@ void MCInst_Init(MCInst *inst) { - inst->Opcode = 0; - inst->OpcodePub = 0; - inst->size = 0; - inst->has_imm = false; - inst->op1_size = 0; - inst->writeback = false; - inst->ac_idx = 0; - inst->popcode_adjust = 0; - inst->assembly[0] = '\0'; + memset (inst, 0, sizeof (MCInst)); } void MCInst_clear(MCInst *inst) diff --git a/cs.c b/cs.c index 449b1da5..fe87a318 100644 --- a/cs.c +++ b/cs.c @@ -641,7 +641,7 @@ size_t CAPSTONE_API cs_disasm(csh ud, const uint8_t *buffer, size_t size, uint64 size_org = size; total_size = sizeof(cs_insn) * cache_size; - total = cs_mem_malloc(total_size); + total = cs_mem_calloc(1, total_size); if (total == NULL) { // insufficient memory handle->errnum = CS_ERR_MEM; @@ -659,7 +659,7 @@ size_t CAPSTONE_API cs_disasm(csh ud, const uint8_t *buffer, size_t size, uint64 if (handle->detail) { // allocate memory for @detail pointer - insn_cache->detail = cs_mem_malloc(sizeof(cs_detail)); + insn_cache->detail = cs_mem_calloc(1, sizeof(cs_detail)); } else { insn_cache->detail = NULL; } @@ -747,6 +747,7 @@ size_t CAPSTONE_API cs_disasm(csh ud, const uint8_t *buffer, size_t size, uint64 if (f == cache_size) { // full cache, so expand the cache to contain incoming insns cache_size = cache_size * 8 / 5; // * 1.6 ~ golden ratio + unsigned int old_size = total_size; total_size += (sizeof(cs_insn) * cache_size); tmp = cs_mem_realloc(total, total_size); if (tmp == NULL) { // insufficient memory @@ -761,7 +762,7 @@ size_t CAPSTONE_API cs_disasm(csh ud, const uint8_t *buffer, size_t size, uint64 handle->errnum = CS_ERR_MEM; return 0; } - + memset (total + (sizeof(cs_insn) * old_size), 0, (total_size - old_size)); total = tmp; // continue to fill in the cache after the last instruction insn_cache = (cs_insn *)((char *)total + sizeof(cs_insn) * c);