xmlrpc.client.loads raises IndexError on a malformed struct
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 description
xmlrpc.client.loads() raises a raw IndexError instead of xmlrpc.client.ResponseError when unmarshalling a <struct> that contains a <member> with a <name> but no <value>.
Unmarshaller.end_struct iterates the stacked items in pairs (items[i], items[i+1]). A <member> missing its <value> leaves an odd number of items, so items[i+1] raises IndexError.
The unmarshaller already raises ResponseError for sibling malformed cases (empty stack at line 640, unknown tag inside <data> at line 663).
Reproducer:
import xmlrpc.client
data = (b'<?xml version="1.0"?>'
b'<methodResponse><params><param><value>'
b'<struct><member><name>k</name></member></struct>'
b'</value></param></params></methodResponse>')
xmlrpc.client.loads(data)
# IndexError: list index out of range
Expected: xmlrpc.client.ResponseError.
CPython versions tested on
3.13, 3.14, 3.15, main
Operating systems tested on
macOS
Linked PRs
- gh-153805
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 Unmarshaller.end_struct, donde el issue identifica la iteración por pares que provoca IndexError, y compárala con el manejo existente de entradas malformadas alrededor de las líneas 640 y 663. Se considera terminado cuando el reproducer provoca xmlrpc.client.ResponseError en lugar de IndexError; el PR vinculado gh-153805 indica que ese 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
- api
- Tipo de issue
- Error
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 25/100