mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-132657: add regression test for PySet_Contains with unhashable type (#141411)
This commit is contained in:
parent
88aeff8eab
commit
2ac738d325
1 changed files with 47 additions and 0 deletions
|
|
@ -155,6 +155,51 @@ test_frozenset_add_in_capi(PyObject *self, PyObject *Py_UNUSED(obj))
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
test_set_contains_does_not_convert_unhashable_key(PyObject *self, PyObject *Py_UNUSED(obj))
|
||||
{
|
||||
// See https://docs.python.org/3/c-api/set.html#c.PySet_Contains
|
||||
PyObject *outer_set = PySet_New(NULL);
|
||||
|
||||
PyObject *needle = PySet_New(NULL);
|
||||
if (needle == NULL) {
|
||||
Py_DECREF(outer_set);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyObject *num = PyLong_FromLong(42);
|
||||
if (num == NULL) {
|
||||
Py_DECREF(outer_set);
|
||||
Py_DECREF(needle);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (PySet_Add(needle, num) < 0) {
|
||||
Py_DECREF(outer_set);
|
||||
Py_DECREF(needle);
|
||||
Py_DECREF(num);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int result = PySet_Contains(outer_set, needle);
|
||||
|
||||
Py_DECREF(num);
|
||||
Py_DECREF(needle);
|
||||
Py_DECREF(outer_set);
|
||||
|
||||
if (result < 0) {
|
||||
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
|
||||
PyErr_Clear();
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyErr_SetString(PyExc_AssertionError,
|
||||
"PySet_Contains should have raised TypeError for unhashable key");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static PyMethodDef test_methods[] = {
|
||||
{"set_check", set_check, METH_O},
|
||||
{"set_checkexact", set_checkexact, METH_O},
|
||||
|
|
@ -174,6 +219,8 @@ static PyMethodDef test_methods[] = {
|
|||
{"set_clear", set_clear, METH_O},
|
||||
|
||||
{"test_frozenset_add_in_capi", test_frozenset_add_in_capi, METH_NOARGS},
|
||||
{"test_set_contains_does_not_convert_unhashable_key",
|
||||
test_set_contains_does_not_convert_unhashable_key, METH_NOARGS},
|
||||
|
||||
{NULL},
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue