python / python/cpython

zipfile.ZipFile fails to read zstd-compressed file consisting of multiple frames

Abierto
#154,481 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

stdlib type-bug
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:

I have a ZIP file archive.zip that contains a file data.npy. This file is compressed with zstd, consisting of two zstd frames. When I try to read this in with zipfile, I get a BadZipFile: Bad CRC-32 for file 'data.npy' error.

import zipfile
with zipfile.ZipFile("archive.zip", "r") as z:
  with z.open("data.npy", "r") as f:
    data = f.read() # -> BadZipFile: Bad CRC-32 ...

The error is a red herring, though: When I disable CRC checking, there is no exception thrown, but the data read is in fact only the data from the first zstd frame. The second frame gets ignored completely (and thus the checksum is wrong).

import zipfile
with zipfile.ZipFile("archive.zip", "r") as z:
  with z.open("data.npy", "r") as f:
    f._update_crc = lambda newdata: None
    data = f.read() # -> result only contains data from first frame

As independent cross-check, I tested decompressing the file with both 7z and WinRAR without issues. So I don't think the file is somehow invalid. This is the file: archive.zip

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs
  • gh-154537

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

El reproductor usa zipfile.ZipFile.open y z.open en el archivo adjunto; empieza reproduciendo el caso de zstd con dos frames en la implementación de zipfile de CPython. Se considera terminado cuando la lectura de data.npy devuelve ambos frames y la comprobación normal de CRC se realiza correctamente, con una prueba de regresión que cubra este comportamiento.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
tooling
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.