From 7b6fc8e19de53fc354144d21b7a644d77ff60410 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 8 Nov 2007 02:28:11 +0000 Subject: [PATCH] Fixed memoryview constructor. It allowed arbitrary keyword arguments. The bug was found by mykhal from #python. I've also added a small test case in the new test_memoryview.py --- Lib/test/test_memoryview.py | 25 +++++++++++++++++++++++++ Objects/memoryobject.c | 11 ++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 Lib/test/test_memoryview.py diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py new file mode 100644 index 00000000000..27adc5ec613 --- /dev/null +++ b/Lib/test/test_memoryview.py @@ -0,0 +1,25 @@ +"""Unit tests for the memoryview + +XXX We need more tests! Some tests are in test_bytes +""" + +import unittest +import test.test_support + +class MemoryviewTest(unittest.TestCase): + + def test_constructor(self): + ob = b'test' + self.assert_(memoryview(ob)) + self.assert_(memoryview(object=ob)) + self.assertRaises(TypeError, memoryview) + self.assertRaises(TypeError, memoryview, ob, ob) + self.assertRaises(TypeError, memoryview, argument=ob) + self.assertRaises(TypeError, memoryview, ob, argument=True) + +def test_main(): + test.test_support.run_unittest(MemoryviewTest) + + +if __name__ == "__main__": + test_main() diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index f0a45f622fd..2f177c21e82 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -69,10 +69,15 @@ PyMemoryView_FromObject(PyObject *base) static PyObject * memory_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) { - PyObject *obj; - if (!PyArg_UnpackTuple(args, "memoryview", 1, 1, &obj)) return NULL; + PyObject *obj; + static char *kwlist[] = {"object", 0}; - return PyMemoryView_FromObject(obj); + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:memoryview", kwlist, + &obj)) { + return NULL; + } + + return PyMemoryView_FromObject(obj); }