From 3ad323ecaf9bbead043a8799d0a6189c6812b581 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 6 Aug 2010 10:18:56 +0000 Subject: [PATCH] Issue8757: Implicit set-to-frozenset conversion not thread-safe. --- Misc/NEWS | 2 ++ Objects/setobject.c | 12 +++--------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index af440f0cdf..fd8c6bba70 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.7.1? Core and Builtins ----------------- +- Issue #83755: Implicit set-to-frozenset conversion was not thread-safe. + - Issue #9416: Fix some issues with complex formatting where the output with no type specifier failed to match the str output: diff --git a/Objects/setobject.c b/Objects/setobject.c index f98a930ede..00cabe609d 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1855,12 +1855,10 @@ set_contains(PySetObject *so, PyObject *key) if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError)) return -1; PyErr_Clear(); - tmpkey = make_new_set(&PyFrozenSet_Type, NULL); + tmpkey = make_new_set(&PyFrozenSet_Type, key); if (tmpkey == NULL) return -1; - set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key); rv = set_contains(so, tmpkey); - set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key); Py_DECREF(tmpkey); } return rv; @@ -1890,12 +1888,10 @@ set_remove(PySetObject *so, PyObject *key) if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError)) return NULL; PyErr_Clear(); - tmpkey = make_new_set(&PyFrozenSet_Type, NULL); + tmpkey = make_new_set(&PyFrozenSet_Type, key); if (tmpkey == NULL) return NULL; - set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key); rv = set_discard_key(so, tmpkey); - set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key); Py_DECREF(tmpkey); if (rv == -1) return NULL; @@ -1924,12 +1920,10 @@ set_discard(PySetObject *so, PyObject *key) if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError)) return NULL; PyErr_Clear(); - tmpkey = make_new_set(&PyFrozenSet_Type, NULL); + tmpkey = make_new_set(&PyFrozenSet_Type, key); if (tmpkey == NULL) return NULL; - set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key); result = set_discard(so, tmpkey); - set_swap_bodies((PySetObject *)tmpkey, (PySetObject *)key); Py_DECREF(tmpkey); return result; } -- 2.50.1