parse_maintainer_name_email returns empty name and wrong email when string has "@" but no angle brackets

Aperta Adatta ai principianti
#5,402 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

@pujitha24 ci sta già lavorando.

Dal 1/11/2026.

  • #5403 di @pujitha24 — aperta
  • #5412 di @RohitSutar1823 — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
84/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Il bug si trova nel controllo has_email all'interno di parse_maintainer_name_email() in src/packagedcode/utils.py. I suoi chiamanti in debian.py e pypi.py passano stringhe di manutentori. Esegui i tre esempi di riproduzione dell'issue per vedere l'output attuale. È fatto quando una stringa senza entrambe le parentesi non restituisce alcuna email, l'esempio systemd di Debian continua a essere analizzato e i test esistenti per questi parser continuano a passare. Verifica l'output atteso per il caso <[email protected], perché l'aspettativa dell'issue su questo punto potrebbe richiedere conferma.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

parse_maintainer_name_email() in src/packagedcode/utils.py is meant to
split Name <email> strings. It should only extract an email when both <
and > are present. The check is wrong:

has_email = "@" in maintainer and all([
    True
    for char in email_wrappers
    if char in maintainer
])

The list only holds the brackets that are present. If neither bracket is
present it is [], and all([]) is True. If only one is present it is
[True], also True. So any string containing @ is treated as Name <email>.

With no <, maintainer.rpartition("<") returns ('', '', maintainer).
The name becomes an empty string and the whole string is saved as the email.

This affects Debian maintainers and uploaders (debian.py) and
pyproject.toml authors and maintainers (pypi.py).

How To Reproduce
from packagedcode.utils import parse_maintainer_name_email

parse_maintainer_name_email("John Doe [email protected]")
# actual:   ('', 'John Doe [email protected]')
# expected: ('John Doe [email protected]', None)

parse_maintainer_name_email("John Doe <[email protected]")
# actual:   ('John Doe', '[email protected]')
# expected: ('John Doe <[email protected]', None)

parse_maintainer_name_email("Debian systemd Maintainers <[email protected]>")
# works correctly, unchanged
Suggested fix
has_email = "@" in maintainer and all(
    char in maintainer
    for char in email_wrappers
)
Lingua principale
Python
Stelle
2.7k
Fork
848
Merge medio
2g 19h
PR unite (30g)
8

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di aboutcode-org/scancode-toolkit

Tutte le issue di aboutcode-org/scancode-toolkit

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.