Skip to content

Commit 684ef2c

Browse files
committed
Issue #28544: Pass PyObject* to _PyDict_Pop, not PyDictObject*
1 parent 833c626 commit 684ef2c

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

Include/dictobject.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ PyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp);
112112
PyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp);
113113
Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys);
114114
Py_ssize_t _PyDict_SizeOf(PyDictObject *);
115-
PyAPI_FUNC(PyObject *) _PyDict_Pop(PyDictObject *, PyObject *, PyObject *);
115+
PyAPI_FUNC(PyObject *) _PyDict_Pop(PyObject *, PyObject *, PyObject *);
116116
PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
117117
#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
118118

Modules/_asynciomodule.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ _Py_IDENTIFIER(_wakeup);
2121

2222
/* State of the _asyncio module */
2323
static PyObject *all_tasks;
24-
static PyDictObject *current_tasks;
24+
static PyObject *current_tasks;
2525
static PyObject *traceback_extract_stack;
2626
static PyObject *asyncio_get_event_loop;
2727
static PyObject *asyncio_future_repr_info_func;
@@ -1429,11 +1429,11 @@ _asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop)
14291429
return NULL;
14301430
}
14311431

1432-
res = PyDict_GetItem((PyObject*)current_tasks, loop);
1432+
res = PyDict_GetItem(current_tasks, loop);
14331433
Py_DECREF(loop);
14341434
}
14351435
else {
1436-
res = PyDict_GetItem((PyObject*)current_tasks, loop);
1436+
res = PyDict_GetItem(current_tasks, loop);
14371437
}
14381438

14391439
if (res == NULL) {
@@ -2235,7 +2235,7 @@ task_step(TaskObj *task, PyObject *exc)
22352235
PyObject *res;
22362236
PyObject *ot;
22372237

2238-
if (PyDict_SetItem((PyObject *)current_tasks,
2238+
if (PyDict_SetItem(current_tasks,
22392239
task->task_loop, (PyObject*)task) == -1)
22402240
{
22412241
return NULL;
@@ -2385,7 +2385,7 @@ module_init(void)
23852385
goto fail;
23862386
}
23872387

2388-
current_tasks = (PyDictObject *)PyDict_New();
2388+
current_tasks = PyDict_New();
23892389
if (current_tasks == NULL) {
23902390
goto fail;
23912391
}

Objects/dictobject.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -1768,13 +1768,17 @@ PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)
17681768

17691769
/* Internal version of dict.pop(). */
17701770
PyObject *
1771-
_PyDict_Pop(PyDictObject *mp, PyObject *key, PyObject *deflt)
1771+
_PyDict_Pop(PyObject *dict, PyObject *key, PyObject *deflt)
17721772
{
17731773
Py_hash_t hash;
17741774
Py_ssize_t ix, hashpos;
17751775
PyObject *old_value, *old_key;
17761776
PyDictKeyEntry *ep;
17771777
PyObject **value_addr;
1778+
PyDictObject *mp;
1779+
1780+
assert(PyDict_Check(dict));
1781+
mp = (PyDictObject *)dict;
17781782

17791783
if (mp->ma_used == 0) {
17801784
if (deflt) {
@@ -2836,7 +2840,7 @@ dict_pop(PyDictObject *mp, PyObject *args)
28362840
if(!PyArg_UnpackTuple(args, "pop", 1, 2, &key, &deflt))
28372841
return NULL;
28382842

2839-
return _PyDict_Pop(mp, key, deflt);
2843+
return _PyDict_Pop((PyObject*)mp, key, deflt);
28402844
}
28412845

28422846
static PyObject *

0 commit comments

Comments
 (0)