_ctypes fails to extend the return value per libffi contract
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:
The current implementation is relying on restype->size to write the data into a buffer, however, per libffi contract
integral types narrower than the system register size are widened
Which is not happening here. This has caused a failure on s390x when using libclang. cindex.py calls into libclang through ctypes, which builds the callback closures using libffi. With a c_int return, ctypes writes only the low 32 bits and skips the extension that both the ABI and libffi's closure contract require.
We have also opened a PR to fix this temporarily under llvm: https://github.com/llvm/llvm-project/pull/221024
CPython versions tested on:
3.11
Operating systems tested on:
Linux
Linked PRs
- gh-157045
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 Modules/_ctypes/callbacks.c, en el manejo enlazado del valor de retorno, y lee el contrato de closures de libffi al que se hace referencia. Reproduce o inspecciona el comportamiento del callback c_int en s390x y, después, verifica que los valores de retorno integrales estrechos sigan la extensión ABI requerida en lugar de limitarse a copiar restype->size bytes. Comprueba el PR enlazado de CPython para ver el trabajo que ya está en curso.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, python
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 35/100