From 095d3970173f3d4ad6c43bd0c363b727d3a67241 Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 11 May 2018 13:44:50 +1000 Subject: [PATCH] py/objdeque: Fix sign extension bug when computing len of deque object. For cases where size_t is smaller than mp_int_t (eg nan-boxing builds) the difference between two size_t's is not sign extended into mp_int_t and so the result is never negative. This patch fixes this bug by using ssize_t for the type of the result. --- py/objdeque.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/py/objdeque.c b/py/objdeque.c index bbb078103b..1cff1f8d3b 100644 --- a/py/objdeque.c +++ b/py/objdeque.c @@ -24,6 +24,7 @@ * THE SOFTWARE. */ +#include // for ssize_t #include #include "py/mpconfig.h" @@ -75,7 +76,7 @@ STATIC mp_obj_t deque_unary_op(mp_unary_op_t op, mp_obj_t self_in) { case MP_UNARY_OP_BOOL: return mp_obj_new_bool(self->i_get != self->i_put); case MP_UNARY_OP_LEN: { - mp_int_t len = self->i_put - self->i_get; + ssize_t len = self->i_put - self->i_get; if (len < 0) { len += self->alloc; }