[Python-checkins] [3.11] gh-94808: Cover `%p` in `PyUnicode_FromFormat` (GH-96677) (#98033)

JelleZijlstra webhook-mailer at python.org
Fri Oct 7 20:09:59 EDT 2022


https://github.com/python/cpython/commit/46aa5d2c2dc60da50291dfdfc00126b14cd92676
commit: 46aa5d2c2dc60da50291dfdfc00126b14cd92676
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: JelleZijlstra <jelle.zijlstra at gmail.com>
date: 2022-10-07T17:09:53-07:00
summary:

[3.11] gh-94808: Cover `%p` in `PyUnicode_FromFormat` (GH-96677) (#98033)

Co-authored-by: Nikita Sobolev <mail at sobolevn.me>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra at gmail.com>

(cherry picked from commit 72c166add89a0cd992d66f75ce94eee5eb675a99)

files:
M Lib/test/test_unicode.py

diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 90bd75f550df..9b0e4b230506 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -2809,6 +2809,25 @@ def check_format(expected, format, *args):
         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'



More information about the Python-checkins mailing list