New submission from Daniel Urban <urban.dani...@gmail.com>: The documentation of getattr_static says: "The only known case that can cause getattr_static to trigger code execution, and cause it to return incorrect results (or even break), is where a class uses __slots__ and provides a __dict__ member using a property or descriptor. If you find other cases please report them so they can be fixed or documented."
I'd like to report another case: when an object's __dict__ is an instance of a dict subclass which overrides dict.get: >>> _sentinel = object() >>> >>> class MyDict(dict): ... def get(self, key, default=_sentinel): ... print('Hello World!') # This code will execute ... if default is _sentinel: ... return super().get(key) ... else: ... return super().get(key, default) ... >>> class X: ... def __init__(self): ... self.__dict__ = MyDict() ... >>> x = X() >>> inspect.getattr_static(x, 'foo', 0) Hello World! 0 >>> (In line 1072. _check_instance calls MyDict.get: instance_dict.get(attr, _sentinel).) ---------- components: Library (Lib) messages: 128067 nosy: durban, michael.foord priority: normal severity: normal status: open title: inspect.getattr_static code execution versions: Python 3.2 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue11133> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com