mirror of https://github.com/python/cpython
gh-99184: Bypass instance attribute access in `repr` of `weakref.ref` (#99244)
This commit is contained in:
parent
2aa22f72fb
commit
58b6be3791
|
@ -116,6 +116,17 @@ class ReferencesTestCase(TestBase):
|
|||
del o
|
||||
repr(wr)
|
||||
|
||||
def test_repr_failure_gh99184(self):
|
||||
class MyConfig(dict):
|
||||
def __getattr__(self, x):
|
||||
return self[x]
|
||||
|
||||
obj = MyConfig(offset=5)
|
||||
obj_weakref = weakref.ref(obj)
|
||||
|
||||
self.assertIn('MyConfig', repr(obj_weakref))
|
||||
self.assertIn('MyConfig', str(obj_weakref))
|
||||
|
||||
def test_basic_callback(self):
|
||||
self.check_basic_callback(C)
|
||||
self.check_basic_callback(create_function)
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Bypass instance attribute access of ``__name__`` in ``repr`` of
|
||||
:class:`weakref.ref`.
|
|
@ -170,10 +170,7 @@ weakref_repr(PyWeakReference *self)
|
|||
}
|
||||
|
||||
Py_INCREF(obj);
|
||||
if (_PyObject_LookupAttr(obj, &_Py_ID(__name__), &name) < 0) {
|
||||
Py_DECREF(obj);
|
||||
return NULL;
|
||||
}
|
||||
name = _PyObject_LookupSpecial(obj, &_Py_ID(__name__));
|
||||
if (name == NULL || !PyUnicode_Check(name)) {
|
||||
repr = PyUnicode_FromFormat(
|
||||
"<weakref at %p; to '%s' at %p>",
|
||||
|
|
Loading…
Reference in New Issue