zipfiles.ZipFile's internal ZipInfo entry cache has no internal bounds
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el punto de entrada zipfile.ZipFile y ejecuta el reproductor de tracemalloc indicado contra un ZIP que contenga muchas entradas. Revisa el PR enlazado gh-153465 antes de empezar, ya que es posible que el trabajo ya esté en curso. Se considera terminado cuando la inicialización ya no permite que la caché interna de entradas de ZipInfo agote la memoria y el caso indicado con muchas entradas tenga cobertura de pruebas.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 20/100