summaryrefslogtreecommitdiffstats
path: root/Objects/dictobject.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2012-03-06 00:03:13 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2012-03-06 00:03:13 (GMT)
commit198b291df7ae66d507849d92ddb6588a630fb71c (patch)
tree9f168ad6e96b6bc9c372dedddafe1f07973c0999 /Objects/dictobject.c
parentb2c7cca0cfda2836ff4ef222bb23ff07a79600fd (diff)
downloadcpython-198b291df7ae66d507849d92ddb6588a630fb71c.zip
cpython-198b291df7ae66d507849d92ddb6588a630fb71c.tar.gz
cpython-198b291df7ae66d507849d92ddb6588a630fb71c.tar.bz2
Close #14205: dict lookup raises a RuntimeError if the dict is modified during
a lookup. "if you want to make a sandbox on top of CPython, you have to fix segfaults" so let's fix segfaults!
Diffstat (limited to 'Objects/dictobject.c')
-rw-r--r--Objects/dictobject.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 83957ac..23ca442 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -347,12 +347,9 @@ lookdict(PyDictObject *mp, PyObject *key, register Py_hash_t hash)
return ep;
}
else {
- /* The compare did major nasty stuff to the
- * dict: start over.
- * XXX A clever adversary could prevent this
- * XXX from terminating.
- */
- return lookdict(mp, key, hash);
+ PyErr_SetString(PyExc_RuntimeError,
+ "dictionary changed size during lookup");
+ return NULL;
}
}
freeslot = NULL;
@@ -379,12 +376,9 @@ lookdict(PyDictObject *mp, PyObject *key, register Py_hash_t hash)
return ep;
}
else {
- /* The compare did major nasty stuff to the
- * dict: start over.
- * XXX A clever adversary could prevent this
- * XXX from terminating.
- */
- return lookdict(mp, key, hash);
+ PyErr_SetString(PyExc_RuntimeError,
+ "dictionary changed size during lookup");
+ return NULL;
}
}
else if (ep->me_key == dummy && freeslot == NULL)