Do not access instructions details if the instruction is marked as SKIPDATA or if the details are NULL
Fixes issues #105
diff --git a/cs.c b/cs.c
index d8b219e..e4ae6e5 100644
--- a/cs.c
+++ b/cs.c
@@ -603,11 +603,22 @@
return false;
struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
return false;
}
+ if(!insn->id) {
+ handle->errnum = CS_ERR_SKIPDATA;
+ return false;
+ }
+
+ if(!insn->detail) {
+ handle->errnum = CS_ERR_DETAIL;
+ return false;
+ }
+
return arr_exist(insn->detail->groups, insn->detail->groups_count, group_id);
}
@@ -617,11 +628,22 @@
return false;
struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
return false;
}
+ if(!insn->id) {
+ handle->errnum = CS_ERR_SKIPDATA;
+ return false;
+ }
+
+ if(!insn->detail) {
+ handle->errnum = CS_ERR_DETAIL;
+ return false;
+ }
+
return arr_exist(insn->detail->regs_read, insn->detail->regs_read_count, reg_id);
}
@@ -636,6 +658,16 @@
return false;
}
+ if(!insn->id) {
+ handle->errnum = CS_ERR_SKIPDATA;
+ return false;
+ }
+
+ if(!insn->detail) {
+ handle->errnum = CS_ERR_DETAIL;
+ return false;
+ }
+
return arr_exist(insn->detail->regs_write, insn->detail->regs_write_count, reg_id);
}
@@ -645,11 +677,22 @@
return -1;
struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
return -1;
}
+ if(!insn->id) {
+ handle->errnum = CS_ERR_SKIPDATA;
+ return -1;
+ }
+
+ if(!insn->detail) {
+ handle->errnum = CS_ERR_DETAIL;
+ return -1;
+ }
+
unsigned int count = 0, i;
handle->errnum = CS_ERR_OK;
@@ -705,11 +748,22 @@
return -1;
struct cs_struct *handle = (struct cs_struct *)(uintptr_t)ud;
+
if (!handle->detail) {
handle->errnum = CS_ERR_DETAIL;
return -1;
}
+ if(!insn->id) {
+ handle->errnum = CS_ERR_SKIPDATA;
+ return -1;
+ }
+
+ if(!insn->detail) {
+ handle->errnum = CS_ERR_DETAIL;
+ return -1;
+ }
+
unsigned int count = 0, i;
handle->errnum = CS_ERR_OK;