python / python/cpython

xmlrpc.client.loads raises IndexError on a malformed struct

Offen
#153,803 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

stdlib type-feature
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne bei Unmarshaller.end_struct, wo das Issue die paarweise Iteration identifiziert, die IndexError auslöst, und vergleiche sie mit der bestehenden Behandlung fehlerhafter Eingaben um die Zeilen 640 und 663. Als abgeschlossen gilt die Aufgabe, wenn der Reproducer xmlrpc.client.ResponseError statt IndexError auslöst; der verknüpfte PR gh-153805 zeigt an, dass diese Arbeit bereits im Gange ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.