diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2012-03-06 00:03:13 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2012-03-06 00:03:13 (GMT) |
commit | 198b291df7ae66d507849d92ddb6588a630fb71c (patch) | |
tree | 9f168ad6e96b6bc9c372dedddafe1f07973c0999 /Objects/dictobject.c | |
parent | b2c7cca0cfda2836ff4ef222bb23ff07a79600fd (diff) | |
download | cpython-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.c | 18 |
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) |