]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-94808: Cover `%p` in `PyUnicode_FromFormat` (#96677)
authorNikita Sobolev <mail@sobolevn.me>
Fri, 7 Oct 2022 16:53:42 +0000 (19:53 +0300)
committerGitHub <noreply@github.com>
Fri, 7 Oct 2022 16:53:42 +0000 (09:53 -0700)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Lib/test/test_unicode.py

index 30faaaf83bec9626169e6f212c07f6c49d75b33a..b9ee9d30318c46e44cce5d7b41d9f85e30f8bf8b 100644 (file)
@@ -2807,6 +2807,25 @@ class CAPITest(unittest.TestCase):
         check_format('repr=abc',
                      b'repr=%V', 'abc', b'xyz')
 
+        # test %p
+        # We cannot test the exact result,
+        # because it returns a hex representation of a C pointer,
+        # which is going to be different each time. But, we can test the format.
+        p_format_regex = r'^0x[a-zA-Z0-9]{8,}$'
+        p_format1 = PyUnicode_FromFormat(b'%p', 'abc')
+        self.assertIsInstance(p_format1, str)
+        self.assertRegex(p_format1, p_format_regex)
+
+        p_format2 = PyUnicode_FromFormat(b'%p %p', '123456', b'xyz')
+        self.assertIsInstance(p_format2, str)
+        self.assertRegex(p_format2,
+                         r'0x[a-zA-Z0-9]{8,} 0x[a-zA-Z0-9]{8,}')
+
+        # Extra args are ignored:
+        p_format3 = PyUnicode_FromFormat(b'%p', '123456', None, b'xyz')
+        self.assertIsInstance(p_format3, str)
+        self.assertRegex(p_format3, p_format_regex)
+
         # Test string decode from parameter of %s using utf-8.
         # b'\xe4\xba\xba\xe6\xb0\x91' is utf-8 encoded byte sequence of
         # '\u4eba\u6c11'