Crash in `DistributionFinder.context` because it is using `vars(self).update(kwargs)` under memory preasure
Ouverte
@deadlovelll y travaille déjà.
Depuis le 29/6/2026.
stdlib
topic-importlib
type-crash
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Crash report
Original report: https://gist.github.com/devdanzin/bf9fec4554c58c2a279b05b7ff8e6d9b (it produces the correct repro, but everything else is not correct, since it is AI generated and can be fuzzy).
Here's the real picture.
This class raises an error:
Repro:
import faulthandler, importlib.metadata
faulthandler.enable()
from _testcapi import set_nomemory
for start in range(40):
set_nomemory(start)
try:
importlib.metadata.metadata("f")
except BaseException:
pass
print("done, no crash")
Error:
Fatal Python error: _Py_Dealloc: Deallocator of type 'Context' cleared the current exception
Python runtime state: initialized
Stack (most recent call first):
File "/Users/sobolev/Desktop/cpython/Lib/importlib/metadata/__init__.py", line 465 in from_name
File "/Users/sobolev/Desktop/cpython/Lib/importlib/metadata/__init__.py", line 1091 in metadata
File "/Users/sobolev/Desktop/cpython/ex.py", line 7 in <module>
Extension modules: _testcapi (total: 1)
[1] 14108 abort ./python.exe ex.py
I tested this hack, no crash:
diff --git Lib/importlib/metadata/__init__.py Lib/importlib/metadata/__init__.py
index 32f4b7d2d6e..43ec93db749 100644
--- Lib/importlib/metadata/__init__.py
+++ Lib/importlib/metadata/__init__.py
@@ -777,7 +777,8 @@ class Context:
"""
def __init__(self, **kwargs):
- vars(self).update(kwargs)
+ for k, v in kwargs.items():
+ setattr(self, k, v)
@property
def path(self) -> list[str]:
But, this is clearly not a proper fix. Because for some reason the exception is cleared somewhere.
After:
» ./python.exe ex.py
object address : 0x20002128190
object refcount : 3
object type : 0x101267e70
object type name: MemoryError
object repr :
lost sys.stderr
object address : 0x20002128110
object refcount : 3
object type : 0x101267e70
object type name: MemoryError
object repr :
lost sys.stderr
Linked PRs
- gh-152981
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.
Évaluation
Cette issue n'a pas encore été évaluée.