zipfiles.ZipFile's internal ZipInfo entry cache has no internal bounds
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
ZIP files with substantially many entries will exhaust memory when initialized using the zipfile module. As far as I know, there is no way to prevent this using the zipfile.ZipFile API.
The following code produces a ZIP file of 427 MB:
import zipfile
import tracemalloc
N = 5_000_000
tracemalloc.start()
try:
with zipfile.ZipFile("test.zip", "w") as zf:
for i in range(N):
zf.writestr(str(i), "")
finally:
m, _ = tracemalloc.get_traced_memory()
print(f"{m >> 20} MB")
The following code on the produced ZIP file outputs 2408 MB on my machine:
import zipfile
import tracemalloc
tracemalloc.start()
try:
with zipfile.ZipFile("test.zip", "r") as zf:
pass
finally:
m, _ = tracemalloc.get_traced_memory()
print(f"{m >> 20} MB")
CPython versions tested on:
CPython main branch, 3.14
Operating systems tested on:
Linux
Linked PRs
- gh-153465
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le point d’entrée zipfile.ZipFile et exécutez le reproducteur tracemalloc signalé sur un ZIP contenant de nombreuses entrées. Consultez la PR liée gh-153465 avant de commencer, car le travail est peut-être déjà en cours. Le travail est terminé lorsque l’initialisation ne permet plus au cache interne des entrées ZipInfo d’épuiser la mémoire et que le cas signalé comportant un grand nombre d’entrées est couvert par des tests.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 20/100