pentoo-overlay/dev-libs/capstone/files/capstone-calloc.patch

60 lines
2 KiB
Diff

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);