Issue #1445: Fix a SystemError when accessing the ``cell_contents``

attribute of an empty cell object.  Now a ValueError is raised.
This commit is contained in:
Amaury Forgeot d'Arc 2007-11-24 13:44:17 +00:00
parent 6dae85f409
commit ce7d10ccc4
3 changed files with 21 additions and 1 deletions

View File

@ -242,6 +242,17 @@ def test_func_closure():
verify(c[0].__class__.__name__ == "cell") # don't have a type object handy
cantset(f, "func_closure", c)
def test_empty_cell():
def f(): print a
try:
f.func_closure[0].cell_contents
except ValueError:
pass
else:
raise TestFailed, "shouldn't be able to read an empty cell"
a = 12
def test_func_doc():
def f(): pass
verify(f.__doc__ is None)
@ -385,6 +396,7 @@ def test_im_name():
def testmore():
test_func_closure()
test_empty_cell()
test_func_doc()
test_func_globals()
test_func_name()

View File

@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1?
Core and builtins
-----------------
- Issue #1445: Fix a SystemError when accessing the ``cell_contents``
attribute of an empty cell object.
- Issue #1460: The utf-7 incremental decoder did not accept truncated input.
It now correctly saves its state between chunks of data.

View File

@ -89,7 +89,12 @@ cell_clear(PyCellObject *op)
static PyObject *
cell_get_contents(PyCellObject *op, void *closure)
{
Py_XINCREF(op->ob_ref);
if (op->ob_ref == NULL)
{
PyErr_SetString(PyExc_ValueError, "Cell is empty");
return NULL;
}
Py_INCREF(op->ob_ref);
return op->ob_ref;
}