Skip to content

Commit ba30a54

Browse files
committed
contrib: macdeploy: monkey-patch gen-sdk to be deterministic
on different Python versions (there was a change in TAR handling between Python 3.8 and Python 3.9)
1 parent 1868a17 commit ba30a54

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

contrib/macdeploy/gen-sdk

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ import gzip
88
import os
99
import contextlib
1010

11+
# monkey-patch Python 3.8 and older to fix wrong TAR header handling
12+
# see https://github.com/bitcoin/bitcoin/pull/24534
13+
# and https://github.com/python/cpython/pull/18080 for more info
14+
if sys.version_info < (3, 9):
15+
_old_create_header = tarfile.TarInfo._create_header
16+
def _create_header(info, format, encoding, errors):
17+
buf = _old_create_header(info, format, encoding, errors)
18+
# replace devmajor/devminor with binary zeroes
19+
buf = buf[:329] + bytes(16) + buf[345:]
20+
# recompute checksum
21+
chksum = tarfile.calc_chksums(buf)[0]
22+
buf = buf[:-364] + bytes("%06o\0" % chksum, "ascii") + buf[-357:]
23+
return buf
24+
tarfile.TarInfo._create_header = staticmethod(_create_header)
25+
1126
@contextlib.contextmanager
1227
def cd(path):
1328
"""Context manager that restores PWD even if an exception was raised."""

0 commit comments

Comments
 (0)