ShareableList corrupts multi-byte UTF-8 strings and bytes with trailing nulls
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:
Issue
ShareableList allocates string slots based on character count instead of UTF-8 byte count, causing corruption for multi-byte characters. Additionally, rstrip(b'\x00') strips legitimate trailing null bytes from bytes values.
Note: The trailing null bytes issue was originally reported in #106939 (July 2023) and documented as a known issue with a workaround. This fix attempts to resolve both that long-standing issue and the newly discovered UTF-8 corruption bug.
Reproducer
from multiprocessing.shared_memory import ShareableList
# String corruption
sl = ShareableList(['0\U00010000\U00010000'])
print(sl[0]) # UnicodeDecodeError
sl.shm.close(); sl.shm.unlink()
# Bytes corruption
sl = ShareableList([b'\x00'])
print(repr(sl[0])) # b'' instead of b'\x00'
sl.shm.close(); sl.shm.unlink()
CPython versions tested on:
CPython main branch
Operating systems tested on:
No response
Linked PRs
- gh-145266
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 en el punto de entrada multiprocessing.shared_memory.ShareableList y ejecuta los dos fragmentos de reproducción del issue. Se considera terminado cuando las cadenas multibyte siguen siendo decodificables y los valores de bytes conservan los bytes nulos finales; revisa el PR vinculado gh-145266 antes de empezar, porque el trabajo ya está en curso.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- operating-systems
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 25/100