Tarfile extraction does not work on Windows
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 36k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Using Python 3.10.5, there is a scenario where the extractall function of tarfile is causing an infinite loop for Python on Windows, but not in Linux.
The tar-file where the issue occurred was the one produced by docker export, where a file-system is saved as a tar file. Unfortunately, it is too big to upload here, so I will give some commands to get this file.
> docker create --name "testcontainer" tomcat
> docker export --output="testtomcat.tar" testcontainer
That should produce a file of about 457MB.
Now, using Python 3.10.5 under Windows, the following code-snippet will crash:
import tarfile
with tarfile.open("testtomcat.tar") as tarf:
members_to_extract = [tar_info for tar_info in tarf.getmembers()
if not tar_info.isdev()]
tarf.extractall(path="/tmp/foo/", members=members_to_extract)
The error says: maximum recursion depth exceeded while calling a Python object
Your environment
- CPython versions tested on: Python 3.10.5
- Operating system and architecture: Windows 11 is where it failed, and it works fine with the same python version in Arch Linux with kernel
Linux 5.15.58-2-lts x86_64
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit tarfile.extractall und der im Bericht gezeigten members-Filterung. Reproduziere anschließend das Verhalten unter Windows mithilfe der Befehle docker create und docker export. Vergleiche die Extraktion mit derselben Python-Version unter Linux. Die Aufgabe ist erledigt, wenn das exportierte tar-Archiv unter Windows ohne den Fehler wegen überschrittener Rekursionstiefe oder eine Endlosschleife extrahiert werden kann.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- docker, python
- Bereich
- operating-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100