From 69d081a7cf7e0ae1e815365af8b3c19be293da84 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 25 May 2014 02:29:40 +0300 Subject: [PATCH] py: Handle case of slice start > stop in common sequence function. --- py/objstr.c | 3 --- py/sequence.c | 6 ++++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/py/objstr.c b/py/objstr.c index 67de2ce804..4ec1034e1e 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -355,9 +355,6 @@ STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) { if (!mp_seq_get_fast_slice_indexes(self_len, index, &start, &stop)) { assert(0); } - if (start >= stop) { - return MP_OBJ_NEW_QSTR(MP_QSTR_); - } return str_new(type, self_data + start, stop - start); } #endif diff --git a/py/sequence.c b/py/sequence.c index 2c1f6a836c..0a4bb26b31 100644 --- a/py/sequence.c +++ b/py/sequence.c @@ -88,6 +88,12 @@ bool mp_seq_get_fast_slice_indexes(machine_uint_t len, mp_obj_t slice, machine_u } else if (stop > len) { stop = len; } + + // CPython returns empty sequence in such case, or point for assignment is at start + if (start > stop) { + stop = start; + } + *begin = start; *end = stop; return true;