gh-94930: skipitem() in getargs.c should return non-NULL on error (GH-94931)

This commit is contained in:
Serhiy Storchaka 2022-07-18 18:07:31 +03:00 committed by GitHub
parent 2f8bff6879
commit 067f0da335
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 8 deletions

View file

@ -877,9 +877,19 @@ class String_TestCase(unittest.TestCase):
def test_s_hash_int(self):
# "s#" without PY_SSIZE_T_CLEAN defined.
from _testcapi import getargs_s_hash_int
self.assertRaises(SystemError, getargs_s_hash_int, "abc")
self.assertRaises(SystemError, getargs_s_hash_int, x=42)
# getargs_s_hash_int() don't raise SystemError because skipitem() is not called.
from _testcapi import getargs_s_hash_int2
buf = bytearray([1, 2])
self.assertRaises(SystemError, getargs_s_hash_int, buf, "abc")
self.assertRaises(SystemError, getargs_s_hash_int, buf, x=42)
self.assertRaises(SystemError, getargs_s_hash_int, buf, x="abc")
self.assertRaises(SystemError, getargs_s_hash_int2, buf, ("abc",))
self.assertRaises(SystemError, getargs_s_hash_int2, buf, x=42)
self.assertRaises(SystemError, getargs_s_hash_int2, buf, x="abc")
buf.append(3) # still mutable -- not locked by a buffer export
# getargs_s_hash_int(buf) may not raise SystemError because skipitem()
# is not called. But it is an implementation detail.
# getargs_s_hash_int(buf)
# getargs_s_hash_int2(buf)
def test_z(self):
from _testcapi import getargs_z