From 09ea792a9423802002500ae0dfa3d668f5e5d9f6 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Thu, 4 Nov 2010 12:35:21 +0000 Subject: [PATCH] Merged revisions 86159 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r86159 | hirokazu.yamamoto | 2010-11-04 21:09:08 +0900 | 2 lines Issue #5391: mmap.read_byte() should return unsigned value [0, 255] instead of signed value [-127, 128]. ........ --- Lib/test/test_mmap.py | 9 +++++++++ Modules/mmapmodule.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index b3869a6317f..b6d2ffbc2bf 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -536,6 +536,15 @@ class MmapTests(unittest.TestCase): m.seek(8) self.assertRaises(ValueError, m.write, b"bar") + def test_non_ascii_byte(self): + for b in (129, 200, 255): # > 128 + m = mmap.mmap(-1, 1) + m.write_byte(b) + self.assertEquals(m[0], b) + m.seek(0) + self.assertEquals(m.read_byte(), b) + m.close() + if os.name == 'nt': def test_tagname(self): data1 = b"0123456789" diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index c39715a3641..00051135d08 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -205,7 +205,7 @@ mmap_read_byte_method(mmap_object *self, if (self->pos < self->size) { char value = self->data[self->pos]; self->pos += 1; - return Py_BuildValue("b", value); + return Py_BuildValue("B", (unsigned char)value); } else { PyErr_SetString(PyExc_ValueError, "read byte out of range"); return NULL;