mirror of
https://github.com/python/cpython.git
synced 2025-09-18 06:30:38 +00:00
properly use the ObjArgs variant of CallMethod in dictview binary operations (closes #26478)
This commit is contained in:
parent
25c0ef518d
commit
f11b25b081
3 changed files with 11 additions and 5 deletions
|
@ -97,6 +97,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'})
|
||||||
|
@ -105,6 +106,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'})
|
||||||
|
@ -113,6 +115,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'})
|
||||||
|
@ -120,6 +123,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()))
|
||||||
|
|
|
@ -10,6 +10,9 @@ Release date: tba
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- 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().
|
||||||
|
|
||||||
|
|
|
@ -3394,7 +3394,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;
|
||||||
|
@ -3414,7 +3414,7 @@ dictviews_and(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;
|
||||||
|
@ -3434,7 +3434,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;
|
||||||
|
@ -3454,8 +3454,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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue