`python -m asyncio ps` fails if any task name is longer than 255 characters
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
Bug description:
One task name longer than 255 characters makes python -m asyncio ps fail for the whole process. The length limit is treated as a validity check instead of a cap.
Repro:
import asyncio
import os
from _remote_debugging import RemoteUnwinder
async def main():
asyncio.create_task(asyncio.sleep(10), name='x' * 256)
await asyncio.sleep(0)
print(RemoteUnwinder(os.getpid()).get_all_awaited_by())
asyncio.run(main())
Actually:
Traceback (most recent call last):
File "/Users/timofeiivankov/cpython/repro.py", line 10, in <module>
asyncio.run(main())
~~~~~~~~~~~^^^^^^^^
File "/Users/timofeiivankov/cpython/Lib/asyncio/runners.py", line 205, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/Users/timofeiivankov/cpython/Lib/asyncio/runners.py", line 128, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/Users/timofeiivankov/cpython/Lib/asyncio/base_events.py", line 725, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "/Users/timofeiivankov/cpython/repro.py", line 8, in main
print(RemoteUnwinder(os.getpid()).get_all_awaited_by())
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
RuntimeError: Invalid string length (256) at 0x101493800
Expected: the call returns and the long name comes back truncated:
[AwaitedInfo(thread_id=21170325, awaited_by=[
TaskInfo(task_id=4312485712, task_name='Task-1', ...),
TaskInfo(task_id=4312485232, task_name='xxx…' (truncated to 255), ...)])]
Proposed fix: Truncate to the limit instead of raising in object_reading.c
I have a fix ready for that
CPython versions tested on:
CPython main branch
Operating systems tested on:
macOS
Linked PRs
- gh-157790
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in object_reading.c und reproduziere den Fehler mit dem bereitgestellten asyncio-Beispiel für einen Aufgabennamen, indem du python -m asyncio ps oder den gezeigten RemoteUnwinder-Aufruf verwendest. Als abgeschlossen gilt die Aufgabe, wenn der Aufruf erfolgreich ist, sobald ein Aufgabenname mehr als 255 Zeichen umfasst, und der zurückgegebene Name auf 255 Zeichen gekürzt wird; sieh dir den verknüpften PR gh-157790 auf bereits laufende Arbeiten an.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- c, python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 30/100