asyncpg icon indicating copy to clipboard operation
asyncpg copied to clipboard

Special character in password raise timeout exception

Open demaet opened this issue 2 years ago • 1 comments

  • 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

demaet avatar Mar 02 '22 13:03 demaet

This should be fixed by #862.

elprans avatar Mar 25 '22 23:03 elprans