[pypy-commit] pypy py3k: cpython issue1574217: don't mask non AttributeErrors from __class__

pjenvey noreply at buildbot.pypy.org
Fri Mar 1 02:25:05 CET 2013


Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r61880:0e8ad33bfe4d
Date: 2013-02-28 17:22 -0800
http://bitbucket.org/pypy/pypy/changeset/0e8ad33bfe4d/

Log:	cpython issue1574217: don't mask non AttributeErrors from __class__

diff --git a/pypy/module/__builtin__/abstractinst.py b/pypy/module/__builtin__/abstractinst.py
--- a/pypy/module/__builtin__/abstractinst.py
+++ b/pypy/module/__builtin__/abstractinst.py
@@ -69,8 +69,8 @@
         # From now on we know that w_klass_or_tuple is indeed a type.
         # Try also to compare it with obj.__class__, if this is not
         # the same as type(obj).
+        w_pretendtype = abstract_getclass(space, w_obj)
         try:
-            w_pretendtype = space.getattr(w_obj, space.wrap('__class__'))
             if space.is_w(w_pretendtype, space.type(w_obj)):
                 return False     # common case: obj.__class__ is type(obj)
             if allow_override:
diff --git a/pypy/module/__builtin__/test/test_abstractinst.py b/pypy/module/__builtin__/test/test_abstractinst.py
--- a/pypy/module/__builtin__/test/test_abstractinst.py
+++ b/pypy/module/__builtin__/test/test_abstractinst.py
@@ -135,6 +135,14 @@
         raises(TypeError, isinstance, x, BBase)
         assert not isinstance(x, BSub2)
 
+        class BadClass:
+            @property
+            def __class__(self):
+                raise RuntimeError
+        raises(RuntimeError, isinstance, BadClass(), bool)
+        # test another code path
+        raises(RuntimeError, isinstance, BadClass(), Foo)
+
     def test_abstract_issubclass(self):
         class MyBaseInst(object):
             pass


More information about the pypy-commit mailing list