MagicStack / MagicStack/asyncpg

Special character in password raise timeout exception

Offen
#894 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
8.1k
Forks
468
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

* **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
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

```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Start with the asyncpg.connect entry point and the connection flow shown in asyncpg/connect_utils.py, including compat.py. Reproduce the password case with the provided PostgreSQL and Python versions, compare it with invalid credentials and an unavailable host, and verify that the special-character case reports the connection or authentication result instead of timing out unexpectedly.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
postgresql, python
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.