Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign upbpo-18819: tarfile: only set device fields for device files #18080
+13
−2
Conversation
The GNU docs describe the `devmajor` and `devminor` fields of the tar header struct only in the context of character and block special files, suggesting that in other cases they are not populated. Typical utilities behave accordingly; this patch teaches `tarfile` to do the same. Test Plan: No tests added because none appear to exist for this module. Manually verified that this enables output that is bit-for-bit compatible with GNU tar. In particular, this program now passes on my Ubuntu 16.04, whereas it failed before this patch: ```python import os import subprocess import tarfile import tempfile filename = "important_data" contents = b"The quick brown fox jumps over the lazy dog" with tempfile.TemporaryDirectory() as tmpdir: os.chdir(tmpdir) with open(filename, "wb") as outfile: outfile.write(contents) with tarfile.open("py.tar", "x", format=tarfile.GNU_FORMAT) as outfile: outfile.add(filename) subprocess.check_call(["tar", "cf", "gnu.tar", filename]) subprocess.check_call(["shasum", "-a", "256", "py.tar", "gnu.tar"]) subprocess.check_call(["cmp", "-b", "py.tar", "gnu.tar"]) ``` (The exact hashes depend on the calling user and current time but should always be the same across both output archives.) wchargin-branch: tarfile-limit-device-headers
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
wchargin commentedJan 20, 2020
•
edited by bedevere-bot
The GNU docs describe the
devmajor
anddevminor
fields of the tarheader struct only in the context of character and block special files,
suggesting that in other cases they are not populated. Typical utilities
behave accordingly; this patch teaches
tarfile
to do the same.Test Plan:
No tests added because none appear to exist for this module. Manually
verified that this enables output that is bit-for-bit compatible with
GNU tar. In particular, this program now passes on my Ubuntu 16.04,
whereas it failed before this patch:
(The exact hashes depend on the calling user and current time but should
always be the same across both output archives.)
wchargin-branch: tarfile-limit-device-headers
https://bugs.python.org/issue18819