diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-12-08 20:40:55 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-12-08 20:40:55 +0200 |
commit | c0877cbb0d51f66fa828f6df5698751210391296 (patch) | |
tree | a42247dfa3f63829f1676d3d30a6c8df45e8498a /py/objint_longlong.c | |
parent | e9d29c9ba997ae0f00f16f3a21dffce7c763a3d4 (diff) |
py/objint_longlong: Check for zero division/modulo.
Diffstat (limited to 'py/objint_longlong.c')
-rw-r--r-- | py/objint_longlong.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/py/objint_longlong.c b/py/objint_longlong.c index 2e567c572..3e5ebadaf 100644 --- a/py/objint_longlong.c +++ b/py/objint_longlong.c @@ -151,9 +151,15 @@ mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_i return mp_obj_new_int_from_ll(lhs_val * rhs_val); case MP_BINARY_OP_FLOOR_DIVIDE: case MP_BINARY_OP_INPLACE_FLOOR_DIVIDE: + if (rhs_val == 0) { + goto zero_division; + } return mp_obj_new_int_from_ll(lhs_val / rhs_val); case MP_BINARY_OP_MODULO: case MP_BINARY_OP_INPLACE_MODULO: + if (rhs_val == 0) { + goto zero_division; + } return mp_obj_new_int_from_ll(lhs_val % rhs_val); case MP_BINARY_OP_AND: @@ -210,6 +216,9 @@ mp_obj_t mp_obj_int_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj_t rhs_i default: return MP_OBJ_NULL; // op not supported } + +zero_division: + mp_raise_msg(&mp_type_ZeroDivisionError, "division by zero"); } mp_obj_t mp_obj_new_int(mp_int_t value) { |