summaryrefslogtreecommitdiffstats
path: root/Lib/ctypes
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-08-09 06:33:05 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-08-09 06:33:05 (GMT)
commit4f06d604c40f12a1d59e3bfda061f3dd7bce6e45 (patch)
tree7de0ffcd42f9eda425082388cc3df0383c8fc0f5 /Lib/ctypes
parente4936b830cbe2fff52f8fd65dc0bf56ad86156eb (diff)
downloadcpython-4f06d604c40f12a1d59e3bfda061f3dd7bce6e45.zip
cpython-4f06d604c40f12a1d59e3bfda061f3dd7bce6e45.tar.gz
cpython-4f06d604c40f12a1d59e3bfda061f3dd7bce6e45.tar.bz2
Issue #22161: Conformed arguments type checks in ctype to actually supported
types. Corrected error messages about bytes arguments.
Diffstat (limited to 'Lib/ctypes')
-rw-r--r--Lib/ctypes/__init__.py4
-rw-r--r--Lib/ctypes/test/test_buffers.py4
-rw-r--r--Lib/ctypes/test/test_bytes.py15
-rw-r--r--Lib/ctypes/test/test_structures.py2
4 files changed, 22 insertions, 3 deletions
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index e34c646..5c803ff 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -49,7 +49,7 @@ def create_string_buffer(init, size=None):
create_string_buffer(anInteger) -> character array
create_string_buffer(aString, anInteger) -> character array
"""
- if isinstance(init, (str, bytes)):
+ if isinstance(init, bytes):
if size is None:
size = len(init)+1
buftype = c_char * size
@@ -284,7 +284,7 @@ def create_unicode_buffer(init, size=None):
create_unicode_buffer(anInteger) -> character array
create_unicode_buffer(aString, anInteger) -> character array
"""
- if isinstance(init, (str, bytes)):
+ if isinstance(init, str):
if size is None:
size = len(init)+1
buftype = c_wchar * size
diff --git a/Lib/ctypes/test/test_buffers.py b/Lib/ctypes/test/test_buffers.py
index 8fa883c..166faaf 100644
--- a/Lib/ctypes/test/test_buffers.py
+++ b/Lib/ctypes/test/test_buffers.py
@@ -21,6 +21,8 @@ class StringBufferTestCase(unittest.TestCase):
self.assertEqual(b[::2], b"ac")
self.assertEqual(b[::5], b"a")
+ self.assertRaises(TypeError, create_string_buffer, "abc")
+
def test_buffer_interface(self):
self.assertEqual(len(bytearray(create_string_buffer(0))), 0)
self.assertEqual(len(bytearray(create_string_buffer(1))), 1)
@@ -43,6 +45,8 @@ class StringBufferTestCase(unittest.TestCase):
self.assertEqual(b[::2], "ac")
self.assertEqual(b[::5], "a")
+ self.assertRaises(TypeError, create_unicode_buffer, b"abc")
+
@need_symbol('c_wchar')
def test_unicode_conversion(self):
b = create_unicode_buffer("abc")
diff --git a/Lib/ctypes/test/test_bytes.py b/Lib/ctypes/test/test_bytes.py
index 363b3f8..20fa056 100644
--- a/Lib/ctypes/test/test_bytes.py
+++ b/Lib/ctypes/test/test_bytes.py
@@ -6,27 +6,40 @@ from ctypes import *
class BytesTest(unittest.TestCase):
def test_c_char(self):
x = c_char(b"x")
+ self.assertRaises(TypeError, c_char, "x")
x.value = b"y"
+ with self.assertRaises(TypeError):
+ x.value = "y"
c_char.from_param(b"x")
+ self.assertRaises(TypeError, c_char.from_param, "x")
(c_char * 3)(b"a", b"b", b"c")
+ self.assertRaises(TypeError, c_char * 3, "a", "b", "c")
def test_c_wchar(self):
x = c_wchar("x")
+ self.assertRaises(TypeError, c_wchar, b"x")
x.value = "y"
+ with self.assertRaises(TypeError):
+ x.value = b"y"
c_wchar.from_param("x")
+ self.assertRaises(TypeError, c_wchar.from_param, b"x")
(c_wchar * 3)("a", "b", "c")
+ self.assertRaises(TypeError, c_wchar * 3, b"a", b"b", b"c")
def test_c_char_p(self):
c_char_p(b"foo bar")
+ self.assertRaises(TypeError, c_char_p, "foo bar")
def test_c_wchar_p(self):
c_wchar_p("foo bar")
+ self.assertRaises(TypeError, c_wchar_p, b"foo bar")
def test_struct(self):
class X(Structure):
_fields_ = [("a", c_char * 3)]
x = X(b"abc")
+ self.assertRaises(TypeError, X, "abc")
self.assertEqual(x.a, b"abc")
self.assertEqual(type(x.a), bytes)
@@ -35,6 +48,7 @@ class BytesTest(unittest.TestCase):
_fields_ = [("a", c_wchar * 3)]
x = X("abc")
+ self.assertRaises(TypeError, X, b"abc")
self.assertEqual(x.a, "abc")
self.assertEqual(type(x.a), str)
@@ -46,5 +60,6 @@ class BytesTest(unittest.TestCase):
BSTR("abc")
+
if __name__ == '__main__':
unittest.main()
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
index d1acc92..84d456c 100644
--- a/Lib/ctypes/test/test_structures.py
+++ b/Lib/ctypes/test/test_structures.py
@@ -322,7 +322,7 @@ class StructureTestCase(unittest.TestCase):
self.assertEqual(cls, RuntimeError)
self.assertEqual(msg,
"(Phone) <class 'TypeError'>: "
- "expected string, int found")
+ "expected bytes, int found")
cls, msg = self.get_except(Person, b"Someone", (b"a", b"b", b"c"))
self.assertEqual(cls, RuntimeError)