diff options
| author | Camille Mougey <commial@gmail.com> | 2017-05-02 14:30:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-02 14:30:21 +0200 |
| commit | 1548b4f389151fec11e6908b6186b5fa55866e08 (patch) | |
| tree | b96bf336b88d03535627f9958b70ab3922f9b35a | |
| parent | 62fdff3fc0872f9e41e4635abbe179e03e53df9b (diff) | |
| parent | af875f2a6ea80bba2e7306d24929a18d85d451ed (diff) | |
| download | miasm-1548b4f389151fec11e6908b6186b5fa55866e08.tar.gz miasm-1548b4f389151fec11e6908b6186b5fa55866e08.zip | |
Merge pull request #545 from serpilliere/avoid_mix_expr_int
Expression: Forbid mix between Expr and int/long
| -rw-r--r-- | miasm2/expression/expression.py | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/miasm2/expression/expression.py b/miasm2/expression/expression.py index 8ea855b5..c9255cca 100644 --- a/miasm2/expression/expression.py +++ b/miasm2/expression/expression.py @@ -560,7 +560,9 @@ class ExprAff(Expr): @dst: Expr, affectation destination @src: Expr, affectation source """ - + # dst & src must be Expr + assert isinstance(dst, Expr) + assert isinstance(src, Expr) super(ExprAff, self).__init__() if dst.size != src.size: @@ -664,6 +666,11 @@ class ExprCond(Expr): @src2: Expr, value if condition is evaled zero """ + # cond, src1, src2 must be Expr + assert isinstance(cond, Expr) + assert isinstance(src1, Expr) + assert isinstance(src2, Expr) + super(ExprCond, self).__init__() self.__cond, self.__src1, self.__src2 = cond, src1, src2 @@ -754,6 +761,10 @@ class ExprMem(Expr): @size: int, memory access size """ + # arg must be Expr + assert isinstance(arg, Expr) + assert isinstance(size, (int, long)) + super(ExprMem, self).__init__() if not isinstance(arg, Expr): @@ -839,6 +850,9 @@ class ExprOp(Expr): @*args: Expr, operand list """ + # args must be Expr + assert all(isinstance(arg, Expr) for arg in args) + super(ExprOp, self).__init__() sizes = set([arg.size for arg in args]) @@ -998,6 +1012,12 @@ class ExprSlice(Expr): __slots__ = Expr.__slots__ + ["__arg", "__start", "__stop"] def __init__(self, arg, start, stop): + + # arg must be Expr + assert isinstance(arg, Expr) + assert isinstance(start, (int, long)) + assert isinstance(stop, (int, long)) + super(ExprSlice, self).__init__() assert start < stop @@ -1097,6 +1117,9 @@ class ExprCompose(Expr): @args: [(Expr, int, int), (Expr, int, int), ...] """ + # args must be Expr + assert all(isinstance(arg, Expr) for arg in args) + super(ExprCompose, self).__init__() assert isinstance(args, tuple) self.__args = args |