Author: Wim Lavrijsen <[email protected]> Branch: reflex-support Changeset: r65922:d9134817f168 Date: 2013-08-03 06:33 -0700 http://bitbucket.org/pypy/pypy/changeset/d9134817f168/
Log: fix for https://bugs.pypy.org/issue1563 (raises ReferenceError instead of segfaulting) diff --git a/pypy/module/cppyy/interp_cppyy.py b/pypy/module/cppyy/interp_cppyy.py --- a/pypy/module/cppyy/interp_cppyy.py +++ b/pypy/module/cppyy/interp_cppyy.py @@ -592,11 +592,15 @@ def get(self, w_cppinstance, w_pycppclass): cppinstance = self.space.interp_w(W_CPPInstance, w_cppinstance, can_be_None=True) + if not cppinstance: + raise OperationError(self.space.w_ReferenceError, self.space.wrap("attribute access requires an instance")) offset = self._get_offset(cppinstance) return self.converter.from_memory(self.space, w_cppinstance, w_pycppclass, offset) def set(self, w_cppinstance, w_value): cppinstance = self.space.interp_w(W_CPPInstance, w_cppinstance, can_be_None=True) + if not cppinstance: + raise OperationError(self.space.w_ReferenceError, self.space.wrap("attribute access requires an instance")) offset = self._get_offset(cppinstance) self.converter.to_memory(self.space, w_cppinstance, w_value, offset) return self.space.w_None diff --git a/pypy/module/cppyy/test/test_datatypes.py b/pypy/module/cppyy/test/test_datatypes.py --- a/pypy/module/cppyy/test/test_datatypes.py +++ b/pypy/module/cppyy/test/test_datatypes.py @@ -105,6 +105,13 @@ raises(IndexError, c.m_float_array.__getitem__, self.N) raises(IndexError, c.m_double_array.__getitem__, self.N) + # can not access an instance member on the class + raises(ReferenceError, getattr, cppyy_test_data, 'm_bool') + raises(ReferenceError, getattr, cppyy_test_data, 'm_int') + + assert not hasattr(cppyy_test_data, 'm_bool') + assert not hasattr(cppyy_test_data, 'm_int') + c.destruct() def test03_instance_data_write_access(self): _______________________________________________ pypy-commit mailing list [email protected] http://mail.python.org/mailman/listinfo/pypy-commit
