diff --git a/asteval/astutils.py b/asteval/astutils.py index a6defad..3a547c5 100644 --- a/asteval/astutils.py +++ b/asteval/astutils.py @@ -226,6 +226,8 @@ def safe_pow(base, exp): def safe_mult(arg1, arg2): """safe version of multiply""" + if isinstance(arg1, int) and isinstance(arg2, str): + arg1, arg2 = arg2, arg1 if isinstance(arg1, str) and isinstance(arg2, int) and len(arg1) * arg2 > MAX_STR_LEN: raise RuntimeError(f"String length exceeded, max string length is {MAX_STR_LEN}") return arg1 * arg2 diff --git a/tests/test_asteval.py b/tests/test_asteval.py index f00be5b..8438712 100644 --- a/tests/test_asteval.py +++ b/tests/test_asteval.py @@ -1224,6 +1224,8 @@ def test_safe_funcs(nested): check_error(interp, 'RuntimeError') interp("'*'*(2<<17) + '*'") check_error(interp, 'RuntimeError') + interp("(1+2<<17)*'*'") + check_error(interp, 'RuntimeError') interp("1.01**10000") check_error(interp, None) interp("1.01**10001")