aboutsummaryrefslogtreecommitdiff
path: root/py/objdeque.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-05-11 13:44:50 +1000
committerDamien George <damien.p.george@gmail.com>2018-05-11 13:44:50 +1000
commit095d3970173f3d4ad6c43bd0c363b727d3a67241 (patch)
tree3c63396dd854f9576554b4fc31952876967be76a /py/objdeque.c
parentb208aa189e948481fb341ddb525c2ec432972462 (diff)
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.
Diffstat (limited to 'py/objdeque.c')
-rw-r--r--py/objdeque.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/py/objdeque.c b/py/objdeque.c
index bbb078103..1cff1f8d3 100644
--- a/py/objdeque.c
+++ b/py/objdeque.c
@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/
+#include <unistd.h> // for ssize_t
#include <string.h>
#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;
}