From f15aee54bd38cfde8331b1f325af0009516714c8 Mon Sep 17 00:00:00 2001 From: Moshe Zadka Date: Fri, 30 Mar 2001 16:49:07 +0000 Subject: Fixing #121965 -- containment in xrange objects. --- Misc/NEWS | 2 ++ Objects/rangeobject.c | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 8061231..a4ed067 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -31,6 +31,8 @@ http://sourceforge.net/tracker/index.php?func=detail&aid=&group_id=5470&atid - #119622: compile errors due to redundant atof decls. Removed from Python/compile.c and Python/marshal.c +- #121965 -- fixing containment in xrange() objects + What's New in Python 2.0? ========================= diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c index 5c794fc..b3ce0c8 100644 --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@ -2,6 +2,8 @@ /* Range object implementation */ #include "Python.h" +#include "structmember.h" +#include typedef struct { PyObject_HEAD @@ -193,21 +195,29 @@ range_contains(rangeobject *r, PyObject *obj) if (num < 0 && PyErr_Occurred()) return -1; - if (num < r->start || (num - r->start) % r->step) - return 0; - if (num > (r->start + (r->len * r->step))) - return 0; + if (r->step > 0) { + if ((num < r->start) || ((num - r->start) % r->step)) + return 0; + if (num >= (r->start + (r->len * r->step))) + return 0; + } + else { + if ((num > r->start) || ((num - r->start) % r->step)) + return 0; + if (num <= (r->start + (r->len * r->step))) + return 0; + } return 1; } static PySequenceMethods range_as_sequence = { - (inquiry)range_length, /*sq_length*/ + (inquiry)range_length, /*sq_length*/ (binaryfunc)range_concat, /*sq_concat*/ (intargfunc)range_repeat, /*sq_repeat*/ (intargfunc)range_item, /*sq_item*/ (intintargfunc)range_slice, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ (objobjproc)range_contains, /*sq_contains*/ }; -- cgit v0.12