nullify handle when cs_open() fails. besides, return CS_ERR_ARCH when arch is unsupported
diff --git a/cs.c b/cs.c
index a7bc704..7eb0f5d 100644
--- a/cs.c
+++ b/cs.c
@@ -54,17 +54,19 @@
return CS_ERR_MEM;
}
- ud->errnum = CS_ERR_OK;
- ud->arch = arch;
- ud->mode = mode;
- ud->big_endian = mode & CS_MODE_BIG_ENDIAN;
- ud->reg_name = NULL;
- ud->detail = CS_OPT_ON; // by default break instruction into details
+ if (arch < CS_ARCH_MAX && arch_init[ud->arch]) {
+ ud->errnum = CS_ERR_OK;
+ ud->arch = arch;
+ ud->mode = mode;
+ ud->big_endian = mode & CS_MODE_BIG_ENDIAN;
+ ud->reg_name = NULL;
+ ud->detail = CS_OPT_ON; // by default break instruction into details
- if (arch_init[ud->arch])
arch_init[ud->arch](ud);
- else
- return CS_ERR_HANDLE;
+ } else {
+ *handle = 0;
+ return CS_ERR_ARCH;
+ }
*handle = (uintptr_t)ud;