python / python/cpython

xml.dom.pulldom DOMEventStream drops SAX events produced by parser.close()

Ouverte
#145,259 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

stdlib topic-XML type-bug
Langage dominant
Python
Étoiles
77.2k
Forks
35.9k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug report

Bug description:

Issue

DOMEventStream.getEvent() silently drops SAX events that are produced when parser.close() is called at end-of-stream. When the stream is exhausted, getEvent() calls self.parser.close() and immediately returns None without checking whether close() generated new events. This causes END_ELEMENT and other trailing events to be lost when bufsize causes the final tag to be split across reads.

Reproducer

import io
from xml.dom.pulldom import parse

events = list(parse(io.BytesIO(b'<a></a>'), bufsize=2))
print([e for e, _ in events])
# ['START_DOCUMENT', 'START_ELEMENT'] — END_ELEMENT is missing

Iterating the DOMEventStream (via list()) internally calls getEvent(), which is where the bug lives.

CPython versions tested on:

CPython main branch

Operating systems tested on:

No response

Linked PRs
  • gh-145262

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par DOMEventStream.getEvent(), où l’issue indique que parser.close() peut produire des événements qui ne sont pas vérifiés. Exécutez le reproducer BytesIO fourni avec bufsize=2 et vérifiez que l’itération conserve l’événement END_ELEMENT final ; le PR lié gh-145262 indique que le travail est déjà en cours.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
backend
Type d'issue
Bug
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.