]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #28544: Pass `PyObject*` to _PyDict_Pop, not `PyDictObject*`
authorYury Selivanov <yury@magic.io>
Fri, 28 Oct 2016 23:01:21 +0000 (19:01 -0400)
committerYury Selivanov <yury@magic.io>
Fri, 28 Oct 2016 23:01:21 +0000 (19:01 -0400)
Include/dictobject.h
Modules/_asynciomodule.c
Objects/dictobject.c

index 5cf6db1f08df48421fdaba89cf3cd9e3eeccad07..30f114e49cbb71de20a3ede4143d7e4d246359b7 100644 (file)
@@ -112,7 +112,7 @@ PyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp);
 PyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp);
 Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys);
 Py_ssize_t _PyDict_SizeOf(PyDictObject *);
-PyAPI_FUNC(PyObject *) _PyDict_Pop(PyDictObject *, PyObject *, PyObject *);
+PyAPI_FUNC(PyObject *) _PyDict_Pop(PyObject *, PyObject *, PyObject *);
 PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
 #define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
 
index f60692382dc24acf020a397ad759dae24cc6f05f..6278b2569375da2030572fd54e9ea5faaeb82f5f 100644 (file)
@@ -21,7 +21,7 @@ _Py_IDENTIFIER(_wakeup);
 
 /* State of the _asyncio module */
 static PyObject *all_tasks;
-static PyDictObject *current_tasks;
+static PyObject *current_tasks;
 static PyObject *traceback_extract_stack;
 static PyObject *asyncio_get_event_loop;
 static PyObject *asyncio_future_repr_info_func;
@@ -1429,11 +1429,11 @@ _asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop)
             return NULL;
         }
 
-        res = PyDict_GetItem((PyObject*)current_tasks, loop);
+        res = PyDict_GetItem(current_tasks, loop);
         Py_DECREF(loop);
     }
     else {
-        res = PyDict_GetItem((PyObject*)current_tasks, loop);
+        res = PyDict_GetItem(current_tasks, loop);
     }
 
     if (res == NULL) {
@@ -2235,7 +2235,7 @@ task_step(TaskObj *task, PyObject *exc)
     PyObject *res;
     PyObject *ot;
 
-    if (PyDict_SetItem((PyObject *)current_tasks,
+    if (PyDict_SetItem(current_tasks,
                        task->task_loop, (PyObject*)task) == -1)
     {
         return NULL;
@@ -2385,7 +2385,7 @@ module_init(void)
         goto fail;
     }
 
-    current_tasks = (PyDictObject *)PyDict_New();
+    current_tasks = PyDict_New();
     if (current_tasks == NULL) {
         goto fail;
     }
index 9f98f6813518982928622c970510fa8389125ecf..62ca48490bce30585e13e6ecc0e4e266e213216b 100644 (file)
@@ -1768,13 +1768,17 @@ PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)
 
 /* Internal version of dict.pop(). */
 PyObject *
-_PyDict_Pop(PyDictObject *mp, PyObject *key, PyObject *deflt)
+_PyDict_Pop(PyObject *dict, PyObject *key, PyObject *deflt)
 {
     Py_hash_t hash;
     Py_ssize_t ix, hashpos;
     PyObject *old_value, *old_key;
     PyDictKeyEntry *ep;
     PyObject **value_addr;
+    PyDictObject *mp;
+
+    assert(PyDict_Check(dict));
+    mp = (PyDictObject *)dict;
 
     if (mp->ma_used == 0) {
         if (deflt) {
@@ -2836,7 +2840,7 @@ dict_pop(PyDictObject *mp, PyObject *args)
     if(!PyArg_UnpackTuple(args, "pop", 1, 2, &key, &deflt))
         return NULL;
 
-    return _PyDict_Pop(mp, key, deflt);
+    return _PyDict_Pop((PyObject*)mp, key, deflt);
 }
 
 static PyObject *