Commit edf5343e authored by Raymond Hettinger's avatar Raymond Hettinger

Port Georg's dictobject.c fix keys that were tuples got unpacked on the way to...

Port Georg's dictobject.c fix keys that were tuples got unpacked on the way to setting a KeyError (svn revision 52535, sf bug
1576657).
parent 1bbf7c99
......@@ -10,6 +10,20 @@
#include "Python.h"
#include "structmember.h"
/* Set a key error with the specified argument, wrapping it in a
* tuple automatically so that tuple keys are not unpacked as the
* exception arguments. */
static void
set_key_error(PyObject *arg)
{
PyObject *tup;
tup = PyTuple_Pack(1, arg);
if (!tup)
return; /* caller will expect error to be set anyway */
PyErr_SetObject(PyExc_KeyError, tup);
Py_DECREF(tup);
}
/* This must be >= 1. */
#define PERTURB_SHIFT 5
......@@ -1684,7 +1698,7 @@ set_remove(PySetObject *so, PyObject *key)
Py_DECREF(tmpkey);
return result;
} else if (rv == DISCARD_NOTFOUND) {
PyErr_SetObject(PyExc_KeyError, key);
set_key_error(key);
return NULL;
}
Py_RETURN_NONE;
......
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