fix a potential memleak in cs_open() - happened when arch is invalid/unsupported
diff --git a/cs.c b/cs.c
index 2e1e91e..8ee19fe 100644
--- a/cs.c
+++ b/cs.c
@@ -86,20 +86,20 @@
cs_err cs_open(cs_arch arch, cs_mode mode, csh *handle)
{
- cs_struct *ud;
-
if (!my_malloc || !my_calloc || !my_realloc || !my_free)
// Error: before cs_open(), dynamic memory management must be initialized
// with cs_option(CS_OPT_MEM)
return CS_ERR_MEMSETUP;
- ud = my_calloc(1, sizeof(*ud));
- if (!ud) {
- // memory insufficient
- return CS_ERR_MEM;
- }
+ if (arch < CS_ARCH_MAX && arch_init[arch]) {
+ cs_struct *ud;
- if (arch < CS_ARCH_MAX && arch_init[ud->arch]) {
+ ud = my_calloc(1, sizeof(*ud));
+ if (!ud) {
+ // memory insufficient
+ return CS_ERR_MEM;
+ }
+
ud->errnum = CS_ERR_OK;
ud->arch = arch;
ud->mode = mode;
@@ -108,14 +108,14 @@
ud->detail = CS_OPT_ON; // by default break instruction into details
arch_init[ud->arch](ud);
+
+ *handle = (uintptr_t)ud;
+
+ return CS_ERR_OK;
} else {
*handle = 0;
return CS_ERR_ARCH;
}
-
- *handle = (uintptr_t)ud;
-
- return CS_ERR_OK;
}
cs_err cs_close(csh handle)