about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorserpilliere <serpilliere@users.noreply.github.com>2020-12-24 13:53:34 +0100
committerGitHub <noreply@github.com>2020-12-24 13:53:34 +0100
commit88314909a30c4a996e1f3fa2859862f37e6e5fdf (patch)
treeb376a203a5e91152aeec69f28ee263225d438ba4
parent745199e77104ef7a1e5879daae5e344de24165ca (diff)
parent97a598ff03037ab5d9f5f803447cde72b9e08580 (diff)
downloadmiasm-88314909a30c4a996e1f3fa2859862f37e6e5fdf.tar.gz
miasm-88314909a30c4a996e1f3fa2859862f37e6e5fdf.zip
Merge pull request #1329 from serpilliere/fix_propagate_div
Simplifications: dont propagate division
-rw-r--r--miasm/expression/simplifications_common.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/miasm/expression/simplifications_common.py b/miasm/expression/simplifications_common.py
index 68d98c00..af409286 100644
--- a/miasm/expression/simplifications_common.py
+++ b/miasm/expression/simplifications_common.py
@@ -71,28 +71,34 @@ def simp_cst_propagation(e_s, expr):
                 shifter = int(int2) % int2.size
                 out = (int(int1) << shifter) | (int(int1) >> (int2.size - shifter))
             elif op_name == '/':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 out = int(int1) // int(int2)
             elif op_name == '%':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 out = int(int1) % int(int2)
             elif op_name == 'sdiv':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2int[int1.size](int(int1))
                 tmp2 = mod_size2int[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 // tmp2)
             elif op_name == 'smod':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2int[int1.size](int(int1))
                 tmp2 = mod_size2int[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 % tmp2)
             elif op_name == 'umod':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2uint[int1.size](int(int1))
                 tmp2 = mod_size2uint[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 % tmp2)
             elif op_name == 'udiv':
-                assert int(int2), "division by 0"
+                if int(int2) == 0:
+                    return expr
                 tmp1 = mod_size2uint[int1.size](int(int1))
                 tmp2 = mod_size2uint[int2.size](int(int2))
                 out = mod_size2uint[int1.size](tmp1 // tmp2)