mirror of
https://github.com/python/cpython.git
synced 2025-08-16 06:40:56 +00:00
[3.12] gh-110525: Cover PySet_Add corner case with frozenset objects (GH-110544) (GH-110554)
(cherry picked from commit ea39c877c0
)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
parent
23624462cb
commit
b2419eff95
1 changed files with 37 additions and 0 deletions
|
@ -129,6 +129,41 @@ set_clear(PyObject *self, PyObject *obj)
|
||||||
RETURN_INT(PySet_Clear(obj));
|
RETURN_INT(PySet_Clear(obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
test_frozenset_add_in_capi(PyObject *self, PyObject *Py_UNUSED(obj))
|
||||||
|
{
|
||||||
|
// Test that `frozenset` can be used with `PySet_Add`,
|
||||||
|
// when frozenset is just created in CAPI.
|
||||||
|
PyObject *fs = PyFrozenSet_New(NULL);
|
||||||
|
if (fs == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
PyObject *num = PyLong_FromLong(1);
|
||||||
|
if (num == NULL) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
if (PySet_Add(fs, num) < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
int contains = PySet_Contains(fs, num);
|
||||||
|
if (contains < 0) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
else if (contains == 0) {
|
||||||
|
goto unexpected;
|
||||||
|
}
|
||||||
|
Py_DECREF(fs);
|
||||||
|
Py_DECREF(num);
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
|
||||||
|
unexpected:
|
||||||
|
PyErr_SetString(PyExc_ValueError, "set does not contain expected value");
|
||||||
|
error:
|
||||||
|
Py_DECREF(fs);
|
||||||
|
Py_XDECREF(num);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static PyMethodDef test_methods[] = {
|
static PyMethodDef test_methods[] = {
|
||||||
{"set_check", set_check, METH_O},
|
{"set_check", set_check, METH_O},
|
||||||
{"set_checkexact", set_checkexact, METH_O},
|
{"set_checkexact", set_checkexact, METH_O},
|
||||||
|
@ -148,6 +183,8 @@ static PyMethodDef test_methods[] = {
|
||||||
{"set_pop", set_pop, METH_O},
|
{"set_pop", set_pop, METH_O},
|
||||||
{"set_clear", set_clear, METH_O},
|
{"set_clear", set_clear, METH_O},
|
||||||
|
|
||||||
|
{"test_frozenset_add_in_capi", test_frozenset_add_in_capi, METH_NOARGS},
|
||||||
|
|
||||||
{NULL},
|
{NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue