From ba30a5407e065e9d6dd037351e83f56a43f38f19 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sat, 12 Mar 2022 12:13:53 +0100 Subject: 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) --- contrib/macdeploy/gen-sdk | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'contrib/macdeploy') diff --git a/contrib/macdeploy/gen-sdk b/contrib/macdeploy/gen-sdk index f1d18fae70..d70cc8613c 100755 --- a/contrib/macdeploy/gen-sdk +++ b/contrib/macdeploy/gen-sdk @@ -8,6 +8,21 @@ import gzip import os import contextlib +# monkey-patch Python 3.8 and older to fix wrong TAR header handling +# see https://github.com/bitcoin/bitcoin/pull/24534 +# and https://github.com/python/cpython/pull/18080 for more info +if sys.version_info < (3, 9): + _old_create_header = tarfile.TarInfo._create_header + def _create_header(info, format, encoding, errors): + buf = _old_create_header(info, format, encoding, errors) + # replace devmajor/devminor with binary zeroes + buf = buf[:329] + bytes(16) + buf[345:] + # recompute checksum + chksum = tarfile.calc_chksums(buf)[0] + buf = buf[:-364] + bytes("%06o\0" % chksum, "ascii") + buf[-357:] + return buf + tarfile.TarInfo._create_header = staticmethod(_create_header) + @contextlib.contextmanager def cd(path): """Context manager that restores PWD even if an exception was raised.""" -- cgit v1.2.3