summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYury Selivanov <yury@magic.io>2016-10-28 23:01:21 (GMT)
committerYury Selivanov <yury@magic.io>2016-10-28 23:01:21 (GMT)
commit684ef2c88882d4c1aaf325fd0a5845740f22c8b7 (patch)
treeb762605c9a3d9c62ee6a9eeaa66ee62823fe7129
parent833c626e6739f7610593e7831166af6d2e064d74 (diff)
downloadcpython-684ef2c88882d4c1aaf325fd0a5845740f22c8b7.zip
cpython-684ef2c88882d4c1aaf325fd0a5845740f22c8b7.tar.gz
cpython-684ef2c88882d4c1aaf325fd0a5845740f22c8b7.tar.bz2
Issue #28544: Pass `PyObject*` to _PyDict_Pop, not `PyDictObject*`
-rw-r--r--Include/dictobject.h2
-rw-r--r--Modules/_asynciomodule.c10
-rw-r--r--Objects/dictobject.c8
3 files changed, 12 insertions, 8 deletions
diff --git a/Include/dictobject.h b/Include/dictobject.h
index 5cf6db1..30f114e 100644
--- a/Include/dictobject.h
+++ b/Include/dictobject.h
@@ -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)
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index f606923..6278b25 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -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;
}
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 9f98f68..62ca484 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -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 *