From 31ea133e64cb6576524e61b734681260104d0a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Andr=C3=A9=20Vadla=20Ravn=C3=A5s?= Date: Sat, 20 Jan 2024 16:50:19 +0100 Subject: [PATCH] Fix regressions in custom memory allocator support (#2251) Where new code started using malloc()/calloc()/free() directly instead of going through cs_mem_*(). --- arch/AArch64/AArch64GenAsmWriter.inc | 4 ++-- arch/AArch64/AArch64InstPrinter.c | 4 ++-- arch/ARM/ARMDisassembler.c | 7 ++----- arch/ARM/ARMGenAsmWriter.inc | 4 ++-- arch/PowerPC/PPCGenAsmWriter.inc | 4 ++-- 5 files changed, 10 insertions(+), 13 deletions(-) diff --git a/arch/AArch64/AArch64GenAsmWriter.inc b/arch/AArch64/AArch64GenAsmWriter.inc index b3ebc7ea30..58e1e0d3f7 100644 --- a/arch/AArch64/AArch64GenAsmWriter.inc +++ b/arch/AArch64/AArch64GenAsmWriter.inc @@ -33295,11 +33295,11 @@ static bool printAliasInstr(MCInst *MI, uint64_t Address, SStream *OS) { while (AsmString[I] != ' ' && AsmString[I] != '\t' && AsmString[I] != '$' && AsmString[I] != '\0') ++I; - char *substr = malloc(I+1); + char *substr = cs_mem_malloc(I+1); memcpy(substr, AsmString, I); substr[I] = '\0'; SStream_concat0(OS, substr); - free(substr); + cs_mem_free(substr); if (AsmString[I] != '\0') { if (AsmString[I] == ' ' || AsmString[I] == '\t') { SStream_concat1(OS, ' '); diff --git a/arch/AArch64/AArch64InstPrinter.c b/arch/AArch64/AArch64InstPrinter.c index 916c5888a0..9fcd856d2b 100644 --- a/arch/AArch64/AArch64InstPrinter.c +++ b/arch/AArch64/AArch64InstPrinter.c @@ -1314,7 +1314,7 @@ DEFINE_printMatrix(0); const char *RegName = getRegisterName(MCOperand_getReg(RegOp), AArch64_NoRegAltName); \ \ unsigned buf_len = strlen(RegName) + 1; \ - char *Base = calloc(1, buf_len); \ + char *Base = cs_mem_calloc(1, buf_len); \ memcpy(Base, RegName, buf_len); \ char *Dot = strchr(Base, '.'); \ if (!Dot) { \ @@ -1326,7 +1326,7 @@ DEFINE_printMatrix(0); SStream_concat(O, "%s%s", Base, (IsVertical ? "v" : "h")); \ SStream_concat1(O, '.'); \ SStream_concat0(O, Suffix); \ - free(Base); \ + cs_mem_free(Base); \ } DEFINE_printMatrixTileVector(0); DEFINE_printMatrixTileVector(1); diff --git a/arch/ARM/ARMDisassembler.c b/arch/ARM/ARMDisassembler.c index e16034333d..43d81e87c3 100644 --- a/arch/ARM/ARMDisassembler.c +++ b/arch/ARM/ARMDisassembler.c @@ -955,11 +955,8 @@ DecodeStatus AddThumbPredicate(MCInst *MI) assert(TiedOp >= 0 && "Inactive register in vpred_r is not tied to an output!"); // Copy the operand to ensure it's not invalidated when MI grows. - MCOperand *Op = malloc(sizeof(MCOperand)); - memcpy(Op, MCInst_getOperand(MI, TiedOp), - sizeof(MCOperand)); - MCInst_insert0(MI, VCCPos + 3, Op); - free(Op); + MCOperand Op = *MCInst_getOperand(MI, TiedOp); + MCInst_insert0(MI, VCCPos + 3, &Op); } } else if (VCC != ARMVCC_None) { Check(&S, MCDisassembler_SoftFail); diff --git a/arch/ARM/ARMGenAsmWriter.inc b/arch/ARM/ARMGenAsmWriter.inc index fb0aa52e45..453e96bda0 100644 --- a/arch/ARM/ARMGenAsmWriter.inc +++ b/arch/ARM/ARMGenAsmWriter.inc @@ -13298,11 +13298,11 @@ static bool printAliasInstr(MCInst *MI, uint64_t Address, SStream *OS) while (AsmString[I] != ' ' && AsmString[I] != '\t' && AsmString[I] != '$' && AsmString[I] != '\0') ++I; - char *substr = malloc(I + 1); + char *substr = cs_mem_malloc(I + 1); memcpy(substr, AsmString, I); substr[I] = '\0'; SStream_concat0(OS, substr); - free(substr); + cs_mem_free(substr); if (AsmString[I] != '\0') { if (AsmString[I] == ' ' || AsmString[I] == '\t') { SStream_concat1(OS, ' '); diff --git a/arch/PowerPC/PPCGenAsmWriter.inc b/arch/PowerPC/PPCGenAsmWriter.inc index dd728389b9..0ffb5cfff2 100644 --- a/arch/PowerPC/PPCGenAsmWriter.inc +++ b/arch/PowerPC/PPCGenAsmWriter.inc @@ -15689,11 +15689,11 @@ static bool printAliasInstr(MCInst *MI, uint64_t Address, SStream *OS) { while (AsmString[I] != ' ' && AsmString[I] != '\t' && AsmString[I] != '$' && AsmString[I] != '\0') ++I; - char *substr = malloc(I+1); + char *substr = cs_mem_malloc(I+1); memcpy(substr, AsmString, I); substr[I] = '\0'; SStream_concat0(OS, substr); - free(substr); + cs_mem_free(substr); if (AsmString[I] != '\0') { if (AsmString[I] == ' ' || AsmString[I] == '\t') { SStream_concat1(OS, ' ');