JoshData / JoshData/python-email-validator
DNS resolver can run for longer than the given timeout
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 1.4k
- Forks
- 140
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
It's very hard to reproduce, we found the problem because we have a 60s timeout for our web server that we kept busting, even with email-validator's default 15s timeout.
Disabling check_availability solved our problem.
The problem
The problem lies within:
response = dns_resolver.resolve(domain, "MX")
( https://github.com/JoshData/python-email-validator/blob/main/email_validator/deliverability.py#L40 )
While debugging, what I can see is that the resolver goes through a loop, and only checks the timeout between calls. It also does some time.sleep()
That means that if a call or a sleep is longer than the timeout, it doesn't get interrupted and can thus run for longer
The solution
Using signal, we could interrupt the process. See https://stackoverflow.com/a/494273
This package does it: https://github.com/pnpnpn/timeout-decorator
I'll try implementing the stackoverflow suggestion on my end and write back with news
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez dans deliverability.py, au niveau de l’appel dns_resolver.resolve(domain, "MX"), et suivez la façon dont le délai d’expiration configuré est transmis lorsque check_availability est activé. Reproduisez ou examinez la boucle du resolver et le comportement de sleep décrits dans l’issue. Le travail est terminé lorsque la résolution DNS ne s’exécute pas au-delà du délai indiqué, tout en préservant le comportement existant de deliverability.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- networking
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100