mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
gh-95781: More strict format string checking in PyUnicode_FromFormatV() (GH-95784)
An unrecognized format character in PyUnicode_FromFormat() and PyUnicode_FromFormatV() now sets a SystemError. In previous versions it caused all the rest of the format string to be copied as-is to the result string, and any extra arguments discarded.
This commit is contained in:
parent
63140b445e
commit
62f06508e7
5 changed files with 35 additions and 39 deletions
|
@ -2641,8 +2641,6 @@ class CAPITest(unittest.TestCase):
|
|||
b'%c%c', c_int(0x10000), c_int(0x100000))
|
||||
|
||||
# test "%"
|
||||
check_format('%',
|
||||
b'%')
|
||||
check_format('%',
|
||||
b'%%')
|
||||
check_format('%s',
|
||||
|
@ -2819,23 +2817,22 @@ class CAPITest(unittest.TestCase):
|
|||
check_format('repr=abc\ufffd',
|
||||
b'repr=%V', None, b'abc\xff')
|
||||
|
||||
# not supported: copy the raw format string. these tests are just here
|
||||
# to check for crashes and should not be considered as specifications
|
||||
check_format('%s',
|
||||
b'%1%s', b'abc')
|
||||
check_format('%1abc',
|
||||
b'%1abc')
|
||||
check_format('%+i',
|
||||
b'%+i', c_int(10))
|
||||
check_format('%.%s',
|
||||
b'%.%s', b'abc')
|
||||
|
||||
# Issue #33817: empty strings
|
||||
check_format('',
|
||||
b'')
|
||||
check_format('',
|
||||
b'%s', b'')
|
||||
|
||||
# check for crashes
|
||||
for fmt in (b'%', b'%0', b'%01', b'%.', b'%.1',
|
||||
b'%0%s', b'%1%s', b'%.%s', b'%.1%s', b'%1abc',
|
||||
b'%l', b'%ll', b'%z', b'%ls', b'%lls', b'%zs'):
|
||||
with self.subTest(fmt=fmt):
|
||||
self.assertRaisesRegex(SystemError, 'invalid format string',
|
||||
PyUnicode_FromFormat, fmt, b'abc')
|
||||
self.assertRaisesRegex(SystemError, 'invalid format string',
|
||||
PyUnicode_FromFormat, b'%+i', c_int(10))
|
||||
|
||||
# Test PyUnicode_AsWideChar()
|
||||
@support.cpython_only
|
||||
@unittest.skipIf(_testcapi is None, 'need _testcapi module')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue