Skip to content

Commit 51ced7a

Browse files
committed
Issue8757: Implicit set-to-frozenset conversion not thread-safe.
1 parent 13197f4 commit 51ced7a

File tree

2 files changed

+5
-9
lines changed

2 files changed

+5
-9
lines changed

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ What's New in Python 3.1.3?
1212
Core and Builtins
1313
-----------------
1414

15+
- Issue #83755: Implicit set-to-frozenset conversion was not thread-safe.
16+
1517
- Issue #9416: Fix some issues with complex formatting where the
1618
output with no type specifier failed to match the str output:
1719

Objects/setobject.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,12 +1846,10 @@ set_contains(PySetObject *so, PyObject *key)
18461846
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
18471847
return -1;
18481848
PyErr_Clear();
1849-
tmpkey = make_new_set(&PyFrozenSet_Type, NULL);
1849+
tmpkey = make_new_set(&PyFrozenSet_Type, key);
18501850
if (tmpkey == NULL)
18511851
return -1;
1852-
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
18531852
rv = set_contains(so, tmpkey);
1854-
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
18551853
Py_DECREF(tmpkey);
18561854
}
18571855
return rv;
@@ -1881,12 +1879,10 @@ set_remove(PySetObject *so, PyObject *key)
18811879
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
18821880
return NULL;
18831881
PyErr_Clear();
1884-
tmpkey = make_new_set(&PyFrozenSet_Type, NULL);
1882+
tmpkey = make_new_set(&PyFrozenSet_Type, key);
18851883
if (tmpkey == NULL)
18861884
return NULL;
1887-
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
18881885
rv = set_discard_key(so, tmpkey);
1889-
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
18901886
Py_DECREF(tmpkey);
18911887
if (rv == -1)
18921888
return NULL;
@@ -1915,12 +1911,10 @@ set_discard(PySetObject *so, PyObject *key)
19151911
if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
19161912
return NULL;
19171913
PyErr_Clear();
1918-
tmpkey = make_new_set(&PyFrozenSet_Type, NULL);
1914+
tmpkey = make_new_set(&PyFrozenSet_Type, key);
19191915
if (tmpkey == NULL)
19201916
return NULL;
1921-
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
19221917
result = set_discard(so, tmpkey);
1923-
set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key);
19241918
Py_DECREF(tmpkey);
19251919
return result;
19261920
}

0 commit comments

Comments
 (0)