summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2006-08-08 17:37:00 (GMT)
committerThomas Heller <theller@ctypes.org>2006-08-08 17:37:00 (GMT)
commitab1049c0462e760b2568ed050e62d094320481fa (patch)
tree4880dac27cc589e5f7dc52cfda05ce8202946663
parentb0061c8e93aadc0d7e0c07734e04f056a8bcb8bb (diff)
downloadcpython-ab1049c0462e760b2568ed050e62d094320481fa.zip
cpython-ab1049c0462e760b2568ed050e62d094320481fa.tar.gz
cpython-ab1049c0462e760b2568ed050e62d094320481fa.tar.bz2
memcmp() can return values other than -1, 0, and +1 but tp_compare
must not.
-rw-r--r--Lib/test/test_types.py3
-rw-r--r--Misc/NEWS2
-rw-r--r--Objects/bufferobject.c2
3 files changed, 6 insertions, 1 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index f0bdfde..83a01aa 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -233,6 +233,9 @@ print 'Buffers'
try: buffer('asdf', -1)
except ValueError: pass
else: raise TestFailed, "buffer('asdf', -1) should raise ValueError"
+cmp(buffer("abc"), buffer("def")) # used to raise a warning: tp_compare didn't return -1, 0, or 1
+
+cmp(buffer('abc'), buffer('def'))
try: buffer(None)
except TypeError: pass
diff --git a/Misc/NEWS b/Misc/NEWS
index 04549b9..24b1645 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 2.5 release candidate 1?
Core and builtins
-----------------
+- Bug #1536786: buffer comparison could emit a RuntimeWarning.
+
- Bug #1535165: fixed a segfault in input() and raw_input() when
sys.stdin is closed.
diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
index 588f7e2..5f3c7a9 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -272,7 +272,7 @@ buffer_compare(PyBufferObject *self, PyBufferObject *other)
if (min_len > 0) {
cmp = memcmp(p1, p2, min_len);
if (cmp != 0)
- return cmp;
+ return cmp < 0 ? -1 : 1;
}
return (len_self < len_other) ? -1 : (len_self > len_other) ? 1 : 0;
}