]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-94808: Cover `%p` in `PyUnicode_FromFormat` (GH-96677) (#98033)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sat, 8 Oct 2022 00:09:53 +0000 (17:09 -0700)
committerGitHub <noreply@github.com>
Sat, 8 Oct 2022 00:09:53 +0000 (17:09 -0700)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
(cherry picked from commit 72c166add89a0cd992d66f75ce94eee5eb675a99)

Lib/test/test_unicode.py

index 90bd75f550dff6b04463a1cee6101a2ca9fbb6f7..9b0e4b230506a8b3f1cc063454879a05b306789f 100644 (file)
@@ -2809,6 +2809,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]{3,}$'
+        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]{3,} 0x[a-zA-Z0-9]{3,}')
+
+        # 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'