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;