Skip to content

Commit 1b615b2

Browse files
authored
[3.7] bpo-37219: Remove erroneous optimization for differencing an empty set (GH-13965) (GH-13968)
1 parent c59b1bb commit 1b615b2

File tree

3 files changed

+7
-8
lines changed

3 files changed

+7
-8
lines changed

Lib/test/test_set.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,12 @@ def test_pickling(self):
895895
self.assertEqual(self.set, copy,
896896
"%s != %s" % (self.set, copy))
897897

898+
def test_issue_37219(self):
899+
with self.assertRaises(TypeError):
900+
set().difference(123)
901+
with self.assertRaises(TypeError):
902+
set().difference_update(123)
903+
898904
#------------------------------------------------------------------------------
899905

900906
class TestBasicOpsEmpty(TestBasicOps, unittest.TestCase):
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Remove errorneous optimization for empty set differences.

Objects/setobject.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,10 +1478,6 @@ PyDoc_STRVAR(isdisjoint_doc,
14781478
static int
14791479
set_difference_update_internal(PySetObject *so, PyObject *other)
14801480
{
1481-
if (PySet_GET_SIZE(so) == 0) {
1482-
return 0;
1483-
}
1484-
14851481
if ((PyObject *)so == other)
14861482
return set_clear_internal(so);
14871483

@@ -1556,10 +1552,6 @@ set_difference(PySetObject *so, PyObject *other)
15561552
Py_ssize_t pos = 0, other_size;
15571553
int rv;
15581554

1559-
if (PySet_GET_SIZE(so) == 0) {
1560-
return set_copy(so);
1561-
}
1562-
15631555
if (PyAnySet_Check(other)) {
15641556
other_size = PySet_GET_SIZE(other);
15651557
}

0 commit comments

Comments
 (0)