]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.10] gh-94808: Cover `%p` in `PyUnicode_FromFormat` (GH-96677) (#98032)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 7 Oct 2022 22:41:06 +0000 (15:41 -0700)
committerGitHub <noreply@github.com>
Fri, 7 Oct 2022 22:41:06 +0000 (15:41 -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 dd1428710d568c5811ee6cb7454968ff891686a6..f5ce095d1c12d6a8917a10d3183826316035eb62 100644 (file)
@@ -2759,6 +2759,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'