python / python/cpython

ZipFile.mkdir(ZipInfo.from_file(...)) CRC AttributeError

Abierto
#119,052 0 comentarios 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:

Adding a directory entry to a zip file on the basis of a ZipInfo object (to pick up metadata) fails because ZipFile evidently expects the object to have a CRC attribute even though it's a directory rather than a file. I can work around this bug by storing the ZipInfo in a variable and giving it a nominal CRC (namely 0), but that shouldn't be necessary. Specifically,

import os
import zipfile
with zipfile.ZipFile("bug.zip", mode = "w") as z:
    os.chdir('/')
    z.mkdir(zipfile.ZipInfo.from_file('usr'))

fails:

  File ".../zipfile-bug.py", line 6, in <module>
    z.mkdir(zipfile.ZipInfo.from_file('usr'))
  File "/usr/lib/python3.12/zipfile/__init__.py", line 1935, in mkdir
    self.fp.write(zinfo.FileHeader(False))
                  ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/zipfile/__init__.py", line 460, in FileHeader
    CRC = self.CRC
          ^^^^^^^^
AttributeError: 'ZipInfo' object has no attribute 'CRC'

Could you please take a look?

Thanks!

CPython versions tested on:

3.11, 3.12, 3.13

Operating systems tested on:

Linux

Linked PRs
  • gh-119108

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

Empieza por Lib/zipfile/init.py, especialmente por ZipFile.mkdir y ZipInfo.FileHeader, y reproduce el ejemplo proporcionado de ZipInfo.from_file('usr'). Comprueba las pruebas de zipfile para las entradas de directorio y añade cobertura para esta llamada; estará terminado cuando el ejemplo se complete sin AttributeError y las pruebas relevantes pasen.

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
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.