New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gettarinfo method does not handle files without text string names #66195
Comments
It looks like if you pass a “fileobj” argument to “gettarinfo”, it assumes it can use the “name” as a text string. >>> import tarfile
>>> with tarfile.open("/dev/null", "w") as tar, open("/bin/sh", "rb") as file: tar.gettarinfo(fileobj=file)
...
<TarInfo 'bin/sh' at 0x7f13cc937f20>
>>> with tarfile.open("/dev/null", "w") as tar, open(b"/bin/sh", "rb") as file: tar.gettarinfo(fileobj=file)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/media/disk/home/proj/python/cpython/Lib/tarfile.py", line 1767, in gettarinfo
arcname = arcname.replace(os.sep, "/")
TypeError: expected bytes, bytearray or buffer compatible object
>>> with tarfile.open("/dev/null", "w") as tar, open(0, "rb", closefd=False) as file: tar.gettarinfo(fileobj=file)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/media/disk/home/proj/python/cpython/Lib/tarfile.py", line 1766, in gettarinfo
drv, arcname = os.path.splitdrive(arcname)
File "Lib/posixpath.py", line 133, in splitdrive
return p[:0], p
TypeError: 'int' object is not subscriptable In my case, my code always sets the final TarInfo.name attribute later on, so the initial name does not matter. Perhaps at least the documentation should say that “fileobj.name” must be a real unencoded file name string unless “arcname” is also given. My workaround was to add a dummy arcname argument, a bit like this: # Explicit dummy name to avoid using file name of bytes
tarinfo = self.tar.gettarinfo(fileobj=file, arcname="")
# . . .
tarinfo.name = "{}/{}".format(self.pkgname, name) |
Agreed, the documentation should be modified to say "(using os.fstat on its file descriptor, and its 'name' attribute if arcname is not specified"). |
Over in bpo-22468, I posted a documentation patch which includes wording to address this bug. |
New changeset 94a94deaf06a by Martin Panter in branch '3.5': New changeset 9d5217aaea13 by Martin Panter in branch '2.7': |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: