about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--example/ida/ctype_propagation.py7
-rw-r--r--miasm2/analysis/cst_propag.py7
-rw-r--r--miasm2/core/objc.py2
3 files changed, 12 insertions, 4 deletions
diff --git a/example/ida/ctype_propagation.py b/example/ida/ctype_propagation.py
index c18abbfd..76d4fa2d 100644
--- a/example/ida/ctype_propagation.py
+++ b/example/ida/ctype_propagation.py
@@ -253,9 +253,10 @@ def analyse_function():
         if (lbl, state) in done:
             continue
         done.add((lbl, state))
-        symbexec_engine = TypePropagationEngine(ir_arch, types_mngr, state)
+        if lbl not in ir_arch.blocks:
+            continue
 
-        assert lbl in ir_arch.blocks
+        symbexec_engine = TypePropagationEngine(ir_arch, types_mngr, state)
         addr = symbexec_engine.emul_ir_block(lbl)
         symbexec_engine.del_mem_above_stack(ir_arch.sp)
 
@@ -266,6 +267,8 @@ def analyse_function():
                       symbexec_engine.get_state())
 
     for lbl, state in states.iteritems():
+        if lbl not in ir_arch.blocks:
+            continue
         symbexec_engine = CTypeEngineFixer(ir_arch, types_mngr, state, cst_propag_link)
         addr = symbexec_engine.emul_ir_block(lbl)
         symbexec_engine.del_mem_above_stack(ir_arch.sp)
diff --git a/miasm2/analysis/cst_propag.py b/miasm2/analysis/cst_propag.py
index d55d7e60..2a439ccc 100644
--- a/miasm2/analysis/cst_propag.py
+++ b/miasm2/analysis/cst_propag.py
@@ -139,9 +139,10 @@ def compute_cst_propagation_states(ir_arch, init_addr, init_infos):
         if (lbl, state) in done:
             continue
         done.add((lbl, state))
-        symbexec_engine = SymbExecState(ir_arch, state)
+        if lbl not in ir_arch.blocks:
+            continue
 
-        assert lbl in ir_arch.blocks
+        symbexec_engine = SymbExecState(ir_arch, state)
         addr = symbexec_engine.emul_ir_block(lbl)
         symbexec_engine.del_mem_above_stack(ir_arch.sp)
 
@@ -173,6 +174,8 @@ def propagate_cst_expr(ir_arch, addr, init_infos):
     states = compute_cst_propagation_states(ir_arch, addr, init_infos)
     cst_propag_link = {}
     for lbl, state in states.iteritems():
+        if lbl not in ir_arch.blocks:
+            continue
         symbexec = SymbExecStateFix(ir_arch, state, cst_propag_link)
         symbexec.emulbloc(ir_arch.blocks[lbl])
     return cst_propag_link
diff --git a/miasm2/core/objc.py b/miasm2/core/objc.py
index d6c100ca..91ef6604 100644
--- a/miasm2/core/objc.py
+++ b/miasm2/core/objc.py
@@ -981,6 +981,8 @@ class ExprToAccessC(ExprReducer):
             return None
         void_type = self.types_mngr.void_ptr
         out = set()
+        if not arg1.expr.is_int():
+            return None
         ptr_offset = int(arg1.expr)
         for info in arg0.info:
             if isinstance(info.ctype, ObjCArray):