ZstdDecompressor.copy_stream() crashes when the source's read() returns str

Abierto
#375 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 3 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
Medio día
Aptitud para principiantes
55/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
c, python
Área
data

Línea de trabajo

The crash is in ZstdDecompressor.copy_stream(), the method on the decompressor class in the C extension. Run the reproducer first to confirm the SIGSEGV, then look at where the value returned by the source's read() is used without a bytes type check. Done means the reproducer raises TypeError instead of crashing, and a regression test covers a text-returning source.

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

Descripción

If the source passed to copy_stream() returns str instead of bytes from read(), e.g., a file opened in text mode, the interpreter crashes with SIGSEGV instead of raising TypeError.

Environment

  • zstandard 0.25.0
  • Python 3.13.5

Reproducer

import io

import zstandard

class Source:
    def __init__(self, chunk):
        self.chunks = [chunk]

    def read(self, size):
        return self.chunks.pop() if self.chunks else b""

zstandard.ZstdDecompressor().copy_stream(Source("data"), io.BytesIO())
Segmentation fault (core dumped)
Lenguaje dominante
C
Estrellas
645
Forks
124
Merge medio
2 d 20 h
PR fusionados (30 d)
8

Preparar el entorno

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.

Más de indygreg/python-zstandard

Todos los issues de indygreg/python-zstandard

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.