summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/pickletester.py4
-rw-r--r--Lib/test/test_memoryview.py27
2 files changed, 26 insertions, 5 deletions
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index c7dbd99..334d4df 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -2323,12 +2323,10 @@ class AbstractPicklingErrorTests:
'PickleBuffer can only be pickled with protocol >= 5')
def test_non_continuous_buffer(self):
- if self.pickler is pickle._Pickler:
- self.skipTest('CRASHES (see gh-122306)')
for proto in protocols[5:]:
with self.subTest(proto=proto):
pb = pickle.PickleBuffer(memoryview(b"foobar")[::2])
- with self.assertRaises(pickle.PicklingError):
+ with self.assertRaises((pickle.PicklingError, BufferError)):
self.dumps(pb, proto)
def test_buffer_callback_error(self):
diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py
index 0eb2a36..2d4bf5f 100644
--- a/Lib/test/test_memoryview.py
+++ b/Lib/test/test_memoryview.py
@@ -18,6 +18,10 @@ import struct
from test.support import import_helper
+class MyObject:
+ pass
+
+
class AbstractMemoryTests:
source_bytes = b"abcdef"
@@ -228,8 +232,6 @@ class AbstractMemoryTests:
self.m = memoryview(base)
class MySource(tp):
pass
- class MyObject:
- pass
# Create a reference cycle through a memoryview object.
# This exercises mbuf_clear().
@@ -656,5 +658,26 @@ class OtherTest(unittest.TestCase):
m[0] = MyBool()
self.assertEqual(ba[:8], b'\0'*8)
+ def test_buffer_reference_loop(self):
+ m = memoryview(b'abc').__buffer__(0)
+ o = MyObject()
+ o.m = m
+ o.o = o
+ wr = weakref.ref(o)
+ del m, o
+ gc.collect()
+ self.assertIsNone(wr())
+
+ def test_picklebuffer_reference_loop(self):
+ pb = pickle.PickleBuffer(memoryview(b'abc'))
+ o = MyObject()
+ o.pb = pb
+ o.o = o
+ wr = weakref.ref(o)
+ del pb, o
+ gc.collect()
+ self.assertIsNone(wr())
+
+
if __name__ == "__main__":
unittest.main()