]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-118761: substitute `re` import in `base64.b16decode` for a more efficient alternat...
authorBénédikt Tran <10796600+picnixz@users.noreply.github.com>
Tue, 14 Jan 2025 13:25:33 +0000 (14:25 +0100)
committerGitHub <noreply@github.com>
Tue, 14 Jan 2025 13:25:33 +0000 (13:25 +0000)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Chris Markiewicz <effigies@gmail.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Doc/whatsnew/3.14.rst
Lib/base64.py
Misc/NEWS.d/next/Library/2025-01-10-13-06-54.gh-issue-118761.f8oADD.rst [new file with mode: 0644]

index 1152c7a90b771251c16192dbfff545c087fd96e6..ac203b208f4a8a2aea819d0a32cdeff13960aaa5 100644 (file)
@@ -728,6 +728,15 @@ asyncio
   reduces memory usage.
   (Contributed by Kumar Aditya in :gh:`107803`.)
 
+
+base64
+------
+
+* Improve the performance of :func:`base64.b16decode` by up to ten times,
+  and reduce the import time of :mod:`base64` by up to six times.
+  (Contributed by Bénédikt Tran, Chris Markiewicz, and Adam Turner in :gh:`118761`.)
+
+
 io
 ---
 * :mod:`io` which provides the built-in :func:`open` makes less system calls
index 61be4fb856e92c546b394e2ca609029aec023f97..5d78cc09f40cd3e9da6a110dd4ad8347e2141856 100644 (file)
@@ -4,7 +4,6 @@
 # Modified 30-Dec-2003 by Barry Warsaw to add full RFC 3548 support
 # Modified 22-May-2007 by Guido van Rossum to use bytes everywhere
 
-import re
 import struct
 import binascii
 
@@ -284,7 +283,7 @@ def b16decode(s, casefold=False):
     s = _bytes_from_decode_data(s)
     if casefold:
         s = s.upper()
-    if re.search(b'[^0-9A-F]', s):
+    if s.translate(None, delete=b'0123456789ABCDEF'):
         raise binascii.Error('Non-base16 digit found')
     return binascii.unhexlify(s)
 
diff --git a/Misc/NEWS.d/next/Library/2025-01-10-13-06-54.gh-issue-118761.f8oADD.rst b/Misc/NEWS.d/next/Library/2025-01-10-13-06-54.gh-issue-118761.f8oADD.rst
new file mode 100644 (file)
index 0000000..37c25cb
--- /dev/null
@@ -0,0 +1,5 @@
+Improve the performance of :func:`base64.b16decode` by up to ten times
+by more efficiently checking the byte-string for hexadecimal digits.
+Reduce the import time of :mod:`base64` by up to six times,
+by no longer importing :mod:`re`.
+Patch by Bénédikt Tran, Chris Markiewicz, and Adam Turner.