gh-92888: Fix memoryview bad `__index__` use after free by Fidget-Spinner · Pull Request #92946 · python/cpython

Fidget-Spinner

@Fidget-Spinner @chilaxan

Co-Authored-By: chilaxan <35645806+chilaxan@users.noreply.github.com>

@blurb-it

@Fidget-Spinner

@Fidget-Spinner

@Fidget-Spinner

serhiy-storchaka

@Fidget-Spinner @serhiy-storchaka

Co-Authored-By: Serhiy Storchaka <3659035+serhiy-storchaka@users.noreply.github.com>

serhiy-storchaka

Co-Authored-By: Serhiy Storchaka <3659035+serhiy-storchaka@users.noreply.github.com>

@Fidget-Spinner

serhiy-storchaka

serhiy-storchaka

@Fidget-Spinner

serhiy-storchaka

@Fidget-Spinner

serhiy-storchaka

vstinner

{
CHECK_RELEASED_INT(self); /* See gh-92888 for why we need this here */
@@ -0,0 +1,2 @@
Fix ``memoryview`` use after free when accessing the backing buffer in certain cases.
def release():
m.release()
nonlocal ba
ba = bytearray(size)
return True

ba = None
m = memoryview(bytearray(b'\xff'*size))
ba = None
m = memoryview(bytearray(b'\xff'*size))
with self.assertRaises(ValueError):
m[MyIndex()]

@Fidget-Spinner

serhiy-storchaka

m = memoryview(bytearray(b'\xff'*size))
with self.assertRaises(ValueError):
m[MyIndex()]

ba = None

@Fidget-Spinner