Commit cfc2a1fc authored by Benjamin Peterson's avatar Benjamin Peterson

merge 3.4 (closes #26478)

parents ff47cfbc f11b25b0
...@@ -96,6 +96,7 @@ class DictSetTest(unittest.TestCase): ...@@ -96,6 +96,7 @@ class DictSetTest(unittest.TestCase):
self.assertEqual(d1.keys() & set(d1.keys()), {'a', 'b'}) self.assertEqual(d1.keys() & set(d1.keys()), {'a', 'b'})
self.assertEqual(d1.keys() & set(d2.keys()), {'b'}) self.assertEqual(d1.keys() & set(d2.keys()), {'b'})
self.assertEqual(d1.keys() & set(d3.keys()), set()) self.assertEqual(d1.keys() & set(d3.keys()), set())
self.assertEqual(d1.keys() & tuple(d1.keys()), {'a', 'b'})
self.assertEqual(d1.keys() | d1.keys(), {'a', 'b'}) self.assertEqual(d1.keys() | d1.keys(), {'a', 'b'})
self.assertEqual(d1.keys() | d2.keys(), {'a', 'b', 'c'}) self.assertEqual(d1.keys() | d2.keys(), {'a', 'b', 'c'})
...@@ -104,6 +105,7 @@ class DictSetTest(unittest.TestCase): ...@@ -104,6 +105,7 @@ class DictSetTest(unittest.TestCase):
self.assertEqual(d1.keys() | set(d2.keys()), {'a', 'b', 'c'}) self.assertEqual(d1.keys() | set(d2.keys()), {'a', 'b', 'c'})
self.assertEqual(d1.keys() | set(d3.keys()), self.assertEqual(d1.keys() | set(d3.keys()),
{'a', 'b', 'd', 'e'}) {'a', 'b', 'd', 'e'})
self.assertEqual(d1.keys() | (1, 2), {'a', 'b', 1, 2})
self.assertEqual(d1.keys() ^ d1.keys(), set()) self.assertEqual(d1.keys() ^ d1.keys(), set())
self.assertEqual(d1.keys() ^ d2.keys(), {'a', 'c'}) self.assertEqual(d1.keys() ^ d2.keys(), {'a', 'c'})
...@@ -112,6 +114,7 @@ class DictSetTest(unittest.TestCase): ...@@ -112,6 +114,7 @@ class DictSetTest(unittest.TestCase):
self.assertEqual(d1.keys() ^ set(d2.keys()), {'a', 'c'}) self.assertEqual(d1.keys() ^ set(d2.keys()), {'a', 'c'})
self.assertEqual(d1.keys() ^ set(d3.keys()), self.assertEqual(d1.keys() ^ set(d3.keys()),
{'a', 'b', 'd', 'e'}) {'a', 'b', 'd', 'e'})
self.assertEqual(d1.keys() ^ tuple(d2.keys()), {'a', 'c'})
self.assertEqual(d1.keys() - d1.keys(), set()) self.assertEqual(d1.keys() - d1.keys(), set())
self.assertEqual(d1.keys() - d2.keys(), {'a'}) self.assertEqual(d1.keys() - d2.keys(), {'a'})
...@@ -119,6 +122,7 @@ class DictSetTest(unittest.TestCase): ...@@ -119,6 +122,7 @@ class DictSetTest(unittest.TestCase):
self.assertEqual(d1.keys() - set(d1.keys()), set()) self.assertEqual(d1.keys() - set(d1.keys()), set())
self.assertEqual(d1.keys() - set(d2.keys()), {'a'}) self.assertEqual(d1.keys() - set(d2.keys()), {'a'})
self.assertEqual(d1.keys() - set(d3.keys()), {'a', 'b'}) self.assertEqual(d1.keys() - set(d3.keys()), {'a', 'b'})
self.assertEqual(d1.keys() - (0, 1), {'a', 'b'})
self.assertFalse(d1.keys().isdisjoint(d1.keys())) self.assertFalse(d1.keys().isdisjoint(d1.keys()))
self.assertFalse(d1.keys().isdisjoint(d2.keys())) self.assertFalse(d1.keys().isdisjoint(d2.keys()))
......
...@@ -76,6 +76,9 @@ Core and Builtins ...@@ -76,6 +76,9 @@ Core and Builtins
__bytes__, __trunc__, and __float__ returning instances of subclasses of __bytes__, __trunc__, and __float__ returning instances of subclasses of
bytes, int, and float to subclasses of bytes, int, and float correspondingly. bytes, int, and float to subclasses of bytes, int, and float correspondingly.
- Issue #26478: Fix semantic bugs when using binary operators with dictionary
views and tuples.
- Issue #26171: Fix possible integer overflow and heap corruption in - Issue #26171: Fix possible integer overflow and heap corruption in
zipimporter.get_data(). zipimporter.get_data().
......
...@@ -3448,7 +3448,7 @@ dictviews_sub(PyObject* self, PyObject *other) ...@@ -3448,7 +3448,7 @@ dictviews_sub(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
tmp = _PyObject_CallMethodId(result, &PyId_difference_update, "O", other); tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_difference_update, other, NULL);
if (tmp == NULL) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
...@@ -3468,7 +3468,7 @@ _PyDictView_Intersect(PyObject* self, PyObject *other) ...@@ -3468,7 +3468,7 @@ _PyDictView_Intersect(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
tmp = _PyObject_CallMethodId(result, &PyId_intersection_update, "O", other); tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_intersection_update, other, NULL);
if (tmp == NULL) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
...@@ -3488,7 +3488,7 @@ dictviews_or(PyObject* self, PyObject *other) ...@@ -3488,7 +3488,7 @@ dictviews_or(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
tmp = _PyObject_CallMethodId(result, &PyId_update, "O", other); tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_update, other, NULL);
if (tmp == NULL) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
...@@ -3508,8 +3508,7 @@ dictviews_xor(PyObject* self, PyObject *other) ...@@ -3508,8 +3508,7 @@ dictviews_xor(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
tmp = _PyObject_CallMethodId(result, &PyId_symmetric_difference_update, "O", tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_symmetric_difference_update, other, NULL);
other);
if (tmp == NULL) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment