MagicStack / MagicStack/asyncpg

Special character in password raise timeout exception

Abierto
#894 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Python
Estrellas
8.1k
Forks
468
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

  • asyncpg version: 0.25.0
  • PostgreSQL version: 10.6
  • Do you use a PostgreSQL SaaS?: no
  • Python version: 3.6.12
  • Platform: UNIX
  • Do you use pgbouncer?: no
  • Did you install asyncpg with pip?: yes

It seems that introduction of some special characters (here the ²) in password breaks the code: it hangs until connection timeout is reached. Even if the password/user/db are wrong. A wrong hostname (eg unavailable or without a responding 5432 port) raise an exception.

test:
conn = await asyncpg.connect(f'postgres://a@{host}/b', password='abc²def', timeout=10)

Traceback (most recent call last):
  File "./....py", line 152, in <module>
    loop.run_until_complete(a())
  File "/usr/lib64/python3.6/asyncio/base_events.py", line 488, in run_until_complete
    return future.result()
  File "./...py", line 134, in a
    conn = await asyncpg.connect(f'postgres://a@{host}/b', password='abc²def', timeout=10)
  File "~/.local/lib/python3.6/site-packages/asyncpg/connection.py", line 2102, in connect
    max_cacheable_statement_size=max_cacheable_statement_size,
  File "~/.local/lib/python3.6/site-packages/asyncpg/connect_utils.py", line 895, in _connect
    raise last_error
  File "~/.local/lib/python3.6/site-packages/asyncpg/connect_utils.py", line 888, in _connect
    record_class=record_class,
  File "~/.local/lib/python3.6/site-packages/asyncpg/connect_utils.py", line 781, in _connect_addr
    return await __connect_addr(params, timeout, True, *args)
  File "~/.local/lib/python3.6/site-packages/asyncpg/connect_utils.py", line 831, in __connect_addr
    await compat.wait_for(connected, timeout=timeout)
  File "~/.local/lib/python3.6/site-packages/asyncpg/compat.py", line 66, in wait_for
    return await asyncio.wait_for(fut, timeout)
  File "/usr/lib64/python3.6/asyncio/tasks.py", line 362, in wait_for
    raise futures.TimeoutError()
concurrent.futures._base.TimeoutError

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el punto de entrada asyncpg.connect y el flujo de conexión mostrado en asyncpg/connect_utils.py, incluido compat.py. Reproduce el caso de la contraseña con las versiones de PostgreSQL y Python proporcionadas, compáralo con credenciales no válidas y con un host no disponible, y verifica que el caso con caracteres especiales informe del resultado de la conexión o la autenticación en lugar de agotar el tiempo de espera inesperadamente.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
postgresql, python
Área
databases
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.