[Python-checkins] bpo-39068: Fix race condition in base64 (GH-17627)

serhiy-storchaka webhook-mailer at python.org
Thu Dec 31 04:44:57 EST 2020


https://github.com/python/cpython/commit/9655434cca5dfbea97bf6d355aec028e840b289c
commit: 9655434cca5dfbea97bf6d355aec028e840b289c
branch: master
author: Brandon Stansbury <brandonrstansbury at gmail.com>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2020-12-31T11:44:46+02:00
summary:

bpo-39068: Fix race condition in base64 (GH-17627)

There was a race condition in base64 in lazy initialization of multiple globals.

files:
A Misc/NEWS.d/next/Library/2019-12-16-17-55-31.bpo-39068.Ti3f9P.rst
M Lib/base64.py
M Misc/ACKS

diff --git a/Lib/base64.py b/Lib/base64.py
index 539ad16f0e86d..e1256ad9358e7 100755
--- a/Lib/base64.py
+++ b/Lib/base64.py
@@ -344,7 +344,7 @@ def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False):
     global _a85chars, _a85chars2
     # Delay the initialization of tables to not waste memory
     # if the function is never called
-    if _a85chars is None:
+    if _a85chars2 is None:
         _a85chars = [bytes((i,)) for i in range(33, 118)]
         _a85chars2 = [(a + b) for a in _a85chars for b in _a85chars]
 
@@ -452,7 +452,7 @@ def b85encode(b, pad=False):
     global _b85chars, _b85chars2
     # Delay the initialization of tables to not waste memory
     # if the function is never called
-    if _b85chars is None:
+    if _b85chars2 is None:
         _b85chars = [bytes((i,)) for i in _b85alphabet]
         _b85chars2 = [(a + b) for a in _b85chars for b in _b85chars]
     return _85encode(b, _b85chars, _b85chars2, pad)
diff --git a/Misc/ACKS b/Misc/ACKS
index 80e51f93e3aa9..211455b4dfc3c 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1659,6 +1659,7 @@ Quentin Stafford-Fraser
 Frank Stajano
 Joel Stanley
 Kyle Stanley
+Brandon Stansbury
 Anthony Starks
 David Steele
 Oliver Steele
diff --git a/Misc/NEWS.d/next/Library/2019-12-16-17-55-31.bpo-39068.Ti3f9P.rst b/Misc/NEWS.d/next/Library/2019-12-16-17-55-31.bpo-39068.Ti3f9P.rst
new file mode 100644
index 0000000000000..fe6503fdce6b6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-12-16-17-55-31.bpo-39068.Ti3f9P.rst
@@ -0,0 +1,2 @@
+Fix initialization race condition in :func:`a85encode` and :func:`b85encode`
+in :mod:`base64`. Patch by Brandon Stansbury.



More information about the Python-checkins mailing list