Commit 30f61cbb authored by Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

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

attribute of an empty cell object.  Now a ValueError is raised.

Backport of r59170.
parent 91637838
...@@ -242,6 +242,17 @@ def test_func_closure(): ...@@ -242,6 +242,17 @@ def test_func_closure():
verify(c[0].__class__.__name__ == "cell") # don't have a type object handy verify(c[0].__class__.__name__ == "cell") # don't have a type object handy
cantset(f, "func_closure", c) 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 test_func_doc():
def f(): pass def f(): pass
verify(f.__doc__ is None) verify(f.__doc__ is None)
...@@ -385,6 +396,7 @@ def test_im_name(): ...@@ -385,6 +396,7 @@ def test_im_name():
def testmore(): def testmore():
test_func_closure() test_func_closure()
test_empty_cell()
test_func_doc() test_func_doc()
test_func_globals() test_func_globals()
test_func_name() test_func_name()
......
+++++++++++ +++++++++++
Python News Python News
+++++++++++ +++++++++++
...@@ -12,6 +12,9 @@ What's New in Python 2.5.2c1? ...@@ -12,6 +12,9 @@ What's New in Python 2.5.2c1?
Core and builtins Core and builtins
----------------- -----------------
- Issue #1445: Fix a SystemError when accessing the ``cell_contents``
attribute of an empty cell object.
- Issue #1265: Fix a problem with sys.settrace, if the tracing function uses a - Issue #1265: Fix a problem with sys.settrace, if the tracing function uses a
generator expression when at the same time the executed code is closing a generator expression when at the same time the executed code is closing a
paused generator. paused generator.
......
...@@ -89,7 +89,12 @@ cell_clear(PyCellObject *op) ...@@ -89,7 +89,12 @@ cell_clear(PyCellObject *op)
static PyObject * static PyObject *
cell_get_contents(PyCellObject *op, void *closure) 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; return op->ob_ref;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment