summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorFurkan Onder <furkanonder@protonmail.com>2023-10-19 22:09:57 (GMT)
committerGitHub <noreply@github.com>2023-10-19 22:09:57 (GMT)
commit9376728ce45191fcc0b908c7487ad7985454537e (patch)
treed99d5d06cb84e92fdf920b45ad3b794321a2cf05 /Lib
parent677d4bc15e999aa57abe7d23d7fac2c34a6fe0ba (diff)
downloadcpython-9376728ce45191fcc0b908c7487ad7985454537e.zip
cpython-9376728ce45191fcc0b908c7487ad7985454537e.tar.gz
cpython-9376728ce45191fcc0b908c7487ad7985454537e.tar.bz2
gh-67565: Add tests for C-contiguity checks (GH-110951)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_binascii.py6
-rw-r--r--Lib/test/test_capi/test_getargs.py19
-rw-r--r--Lib/test/test_ssl.py4
3 files changed, 29 insertions, 0 deletions
diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py
index ef744f6..82dea8a 100644
--- a/Lib/test/test_binascii.py
+++ b/Lib/test/test_binascii.py
@@ -474,6 +474,12 @@ class BinASCIITest(unittest.TestCase):
restored = binascii.a2b_base64(self.type2test(converted))
self.assertConversion(binary, converted, restored, newline=newline)
+ def test_c_contiguity(self):
+ m = memoryview(bytearray(b'noncontig'))
+ noncontig_writable = m[::-2]
+ with self.assertRaises(BufferError):
+ binascii.b2a_hex(noncontig_writable)
+
class ArrayBinASCIITest(BinASCIITest):
def type2test(self, s):
diff --git a/Lib/test/test_capi/test_getargs.py b/Lib/test/test_capi/test_getargs.py
index 96d34ab..6ff436993 100644
--- a/Lib/test/test_capi/test_getargs.py
+++ b/Lib/test/test_capi/test_getargs.py
@@ -153,6 +153,8 @@ class TupleSubclass(tuple):
class DictSubclass(dict):
pass
+NONCONTIG_WRITABLE = memoryview(bytearray(b'noncontig'))[::-2]
+NONCONTIG_READONLY = memoryview(b'noncontig')[::-2]
class Unsigned_TestCase(unittest.TestCase):
def test_b(self):
@@ -837,6 +839,8 @@ class Bytes_TestCase(unittest.TestCase):
self.assertEqual(getargs_y_star(bytearray(b'bytearray')), b'bytearray')
self.assertEqual(getargs_y_star(memoryview(b'memoryview')), b'memoryview')
self.assertRaises(TypeError, getargs_y_star, None)
+ self.assertRaises(BufferError, getargs_y_star, NONCONTIG_WRITABLE)
+ self.assertRaises(BufferError, getargs_y_star, NONCONTIG_READONLY)
def test_y_hash(self):
from _testcapi import getargs_y_hash
@@ -846,6 +850,9 @@ class Bytes_TestCase(unittest.TestCase):
self.assertRaises(TypeError, getargs_y_hash, bytearray(b'bytearray'))
self.assertRaises(TypeError, getargs_y_hash, memoryview(b'memoryview'))
self.assertRaises(TypeError, getargs_y_hash, None)
+ # TypeError: must be read-only bytes-like object, not memoryview
+ self.assertRaises(TypeError, getargs_y_hash, NONCONTIG_WRITABLE)
+ self.assertRaises(TypeError, getargs_y_hash, NONCONTIG_READONLY)
def test_w_star(self):
# getargs_w_star() modifies first and last byte
@@ -861,6 +868,8 @@ class Bytes_TestCase(unittest.TestCase):
self.assertEqual(getargs_w_star(memoryview(buf)), b'[emoryvie]')
self.assertEqual(buf, bytearray(b'[emoryvie]'))
self.assertRaises(TypeError, getargs_w_star, None)
+ self.assertRaises(TypeError, getargs_w_star, NONCONTIG_WRITABLE)
+ self.assertRaises(TypeError, getargs_w_star, NONCONTIG_READONLY)
class String_TestCase(unittest.TestCase):
@@ -893,6 +902,8 @@ class String_TestCase(unittest.TestCase):
self.assertEqual(getargs_s_star(bytearray(b'bytearray')), b'bytearray')
self.assertEqual(getargs_s_star(memoryview(b'memoryview')), b'memoryview')
self.assertRaises(TypeError, getargs_s_star, None)
+ self.assertRaises(BufferError, getargs_s_star, NONCONTIG_WRITABLE)
+ self.assertRaises(BufferError, getargs_s_star, NONCONTIG_READONLY)
def test_s_hash(self):
from _testcapi import getargs_s_hash
@@ -902,6 +913,9 @@ class String_TestCase(unittest.TestCase):
self.assertRaises(TypeError, getargs_s_hash, bytearray(b'bytearray'))
self.assertRaises(TypeError, getargs_s_hash, memoryview(b'memoryview'))
self.assertRaises(TypeError, getargs_s_hash, None)
+ # TypeError: must be read-only bytes-like object, not memoryview
+ self.assertRaises(TypeError, getargs_s_hash, NONCONTIG_WRITABLE)
+ self.assertRaises(TypeError, getargs_s_hash, NONCONTIG_READONLY)
def test_z(self):
from _testcapi import getargs_z
@@ -920,6 +934,8 @@ class String_TestCase(unittest.TestCase):
self.assertEqual(getargs_z_star(bytearray(b'bytearray')), b'bytearray')
self.assertEqual(getargs_z_star(memoryview(b'memoryview')), b'memoryview')
self.assertIsNone(getargs_z_star(None))
+ self.assertRaises(BufferError, getargs_z_star, NONCONTIG_WRITABLE)
+ self.assertRaises(BufferError, getargs_z_star, NONCONTIG_READONLY)
def test_z_hash(self):
from _testcapi import getargs_z_hash
@@ -929,6 +945,9 @@ class String_TestCase(unittest.TestCase):
self.assertRaises(TypeError, getargs_z_hash, bytearray(b'bytearray'))
self.assertRaises(TypeError, getargs_z_hash, memoryview(b'memoryview'))
self.assertIsNone(getargs_z_hash(None))
+ # TypeError: must be read-only bytes-like object, not memoryview
+ self.assertRaises(TypeError, getargs_z_hash, NONCONTIG_WRITABLE)
+ self.assertRaises(TypeError, getargs_z_hash, NONCONTIG_READONLY)
def test_es(self):
from _testcapi import getargs_es
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index 06304dc..d8ae7b7 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -1739,6 +1739,10 @@ class MemoryBIOTests(unittest.TestCase):
self.assertEqual(bio.read(), b'bar')
bio.write(memoryview(b'baz'))
self.assertEqual(bio.read(), b'baz')
+ m = memoryview(bytearray(b'noncontig'))
+ noncontig_writable = m[::-2]
+ with self.assertRaises(BufferError):
+ bio.write(memoryview(noncontig_writable))
def test_error_types(self):
bio = ssl.MemoryBIO()