Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cfc2a1f

Browse files
committed
merge 3.4 (closes #26478)
2 parents ff47cfb + f11b25b commit cfc2a1f

3 files changed

Lines changed: 11 additions & 5 deletions

File tree

Lib/test/test_dictviews.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ def test_keys_set_operations(self):
9696
self.assertEqual(d1.keys() & set(d1.keys()), {'a', 'b'})
9797
self.assertEqual(d1.keys() & set(d2.keys()), {'b'})
9898
self.assertEqual(d1.keys() & set(d3.keys()), set())
99+
self.assertEqual(d1.keys() & tuple(d1.keys()), {'a', 'b'})
99100

100101
self.assertEqual(d1.keys() | d1.keys(), {'a', 'b'})
101102
self.assertEqual(d1.keys() | d2.keys(), {'a', 'b', 'c'})
@@ -104,6 +105,7 @@ def test_keys_set_operations(self):
104105
self.assertEqual(d1.keys() | set(d2.keys()), {'a', 'b', 'c'})
105106
self.assertEqual(d1.keys() | set(d3.keys()),
106107
{'a', 'b', 'd', 'e'})
108+
self.assertEqual(d1.keys() | (1, 2), {'a', 'b', 1, 2})
107109

108110
self.assertEqual(d1.keys() ^ d1.keys(), set())
109111
self.assertEqual(d1.keys() ^ d2.keys(), {'a', 'c'})
@@ -112,13 +114,15 @@ def test_keys_set_operations(self):
112114
self.assertEqual(d1.keys() ^ set(d2.keys()), {'a', 'c'})
113115
self.assertEqual(d1.keys() ^ set(d3.keys()),
114116
{'a', 'b', 'd', 'e'})
117+
self.assertEqual(d1.keys() ^ tuple(d2.keys()), {'a', 'c'})
115118

116119
self.assertEqual(d1.keys() - d1.keys(), set())
117120
self.assertEqual(d1.keys() - d2.keys(), {'a'})
118121
self.assertEqual(d1.keys() - d3.keys(), {'a', 'b'})
119122
self.assertEqual(d1.keys() - set(d1.keys()), set())
120123
self.assertEqual(d1.keys() - set(d2.keys()), {'a'})
121124
self.assertEqual(d1.keys() - set(d3.keys()), {'a', 'b'})
125+
self.assertEqual(d1.keys() - (0, 1), {'a', 'b'})
122126

123127
self.assertFalse(d1.keys().isdisjoint(d1.keys()))
124128
self.assertFalse(d1.keys().isdisjoint(d2.keys()))

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ Core and Builtins
7676
__bytes__, __trunc__, and __float__ returning instances of subclasses of
7777
bytes, int, and float to subclasses of bytes, int, and float correspondingly.
7878

79+
- Issue #26478: Fix semantic bugs when using binary operators with dictionary
80+
views and tuples.
81+
7982
- Issue #26171: Fix possible integer overflow and heap corruption in
8083
zipimporter.get_data().
8184

Objects/dictobject.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3448,7 +3448,7 @@ dictviews_sub(PyObject* self, PyObject *other)
34483448
if (result == NULL)
34493449
return NULL;
34503450

3451-
tmp = _PyObject_CallMethodId(result, &PyId_difference_update, "O", other);
3451+
tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_difference_update, other, NULL);
34523452
if (tmp == NULL) {
34533453
Py_DECREF(result);
34543454
return NULL;
@@ -3468,7 +3468,7 @@ _PyDictView_Intersect(PyObject* self, PyObject *other)
34683468
if (result == NULL)
34693469
return NULL;
34703470

3471-
tmp = _PyObject_CallMethodId(result, &PyId_intersection_update, "O", other);
3471+
tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_intersection_update, other, NULL);
34723472
if (tmp == NULL) {
34733473
Py_DECREF(result);
34743474
return NULL;
@@ -3488,7 +3488,7 @@ dictviews_or(PyObject* self, PyObject *other)
34883488
if (result == NULL)
34893489
return NULL;
34903490

3491-
tmp = _PyObject_CallMethodId(result, &PyId_update, "O", other);
3491+
tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_update, other, NULL);
34923492
if (tmp == NULL) {
34933493
Py_DECREF(result);
34943494
return NULL;
@@ -3508,8 +3508,7 @@ dictviews_xor(PyObject* self, PyObject *other)
35083508
if (result == NULL)
35093509
return NULL;
35103510

3511-
tmp = _PyObject_CallMethodId(result, &PyId_symmetric_difference_update, "O",
3512-
other);
3511+
tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_symmetric_difference_update, other, NULL);
35133512
if (tmp == NULL) {
35143513
Py_DECREF(result);
35153514
return NULL;

0 commit comments

Comments
 (0)