From 4bb8a10390eb7703df505f13eec987bab77e837d Mon Sep 17 00:00:00 2001 From: pancake Date: Fri, 14 Nov 2014 00:40:24 +0100 Subject: [PATCH] Fix segfault in RAsm.fini and disable iter api for arm.cs --- libr/anal/p/anal_arm_cs.c | 13 ++++++++----- libr/anal/p/anal_x86_cs.c | 2 +- libr/asm/asm.c | 2 +- libr/asm/p/asm_x86_cs.c | 2 +- libr/core/plugin.c | 6 +++--- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/libr/anal/p/anal_arm_cs.c b/libr/anal/p/anal_arm_cs.c index 3191c5b32b..8e6f96722c 100644 --- a/libr/anal/p/anal_arm_cs.c +++ b/libr/anal/p/anal_arm_cs.c @@ -170,12 +170,15 @@ static int analop_esil(RAnal *a, RAnalOp *op, ut64 addr, const ut8 *buf, int len } static int analop(RAnal *a, RAnalOp *op, ut64 addr, const ut8 *buf, int len) { - csh handle; - cs_insn *insn; + csh handle = 0; + cs_insn *insn = NULL; int mode = (a->bits==16)? CS_MODE_THUMB: CS_MODE_ARM; - int i, n, ret = (a->bits==64)? - cs_open (CS_ARCH_ARM64, mode, &handle): - cs_open (CS_ARCH_ARM, mode, &handle); + int i, n, ret; + mode |= (a->big_endian)? CS_MODE_BIG_ENDIAN: CS_MODE_LITTLE_ENDIAN; + + ret = (a->bits==64)? + cs_open (CS_ARCH_ARM64, mode, &handle): + cs_open (CS_ARCH_ARM, mode, &handle); cs_option (handle, CS_OPT_DETAIL, CS_OPT_ON); op->type = R_ANAL_OP_TYPE_NULL; op->size = (a->bits==16)? 2: 4; diff --git a/libr/anal/p/anal_x86_cs.c b/libr/anal/p/anal_x86_cs.c index 20167d1ab6..6da1ecfd81 100644 --- a/libr/anal/p/anal_x86_cs.c +++ b/libr/anal/p/anal_x86_cs.c @@ -5,7 +5,7 @@ #include #include -#define USE_ITER_API 1 +#define USE_ITER_API 0 #if CS_API_MAJOR < 2 #error Old Capstone not supported diff --git a/libr/asm/asm.c b/libr/asm/asm.c index ebd1f959c2..677809518e 100644 --- a/libr/asm/asm.c +++ b/libr/asm/asm.c @@ -182,7 +182,7 @@ R_API int r_asm_filter_output(RAsm *a, const char *f) { R_API RAsm *r_asm_free(RAsm *a) { if (a) { - if (a->cur) { + if (a->cur && a->cur->fini) { a->cur->fini (a->cur->user); } if (a->plugins) { diff --git a/libr/asm/p/asm_x86_cs.c b/libr/asm/p/asm_x86_cs.c index 7d59554d72..530cb41c9f 100644 --- a/libr/asm/p/asm_x86_cs.c +++ b/libr/asm/p/asm_x86_cs.c @@ -4,7 +4,7 @@ #include #include -#define USE_ITER_API 1 +#define USE_ITER_API 0 static csh cd = 0; static int n = 0; diff --git a/libr/core/plugin.c b/libr/core/plugin.c index 1ecb838f4c..a40d403405 100644 --- a/libr/core/plugin.c +++ b/libr/core/plugin.c @@ -17,10 +17,10 @@ R_API int r_core_plugin_deinit(RCmd *cmd) { if (plugin && plugin->deinit) { plugin->deinit (cmd, NULL); } - r_list_pop(cmd->plist); + r_list_pop (cmd->plist); } - if (!r_list_empty(cmd->plist)) - r_list_pop(cmd->plist); + if (!r_list_empty (cmd->plist)) + r_list_pop (cmd->plist); return R_TRUE; }