bpo-35059: Cast void* to PyObject* (GH-10650)
https://github.com/python/cpython/commit/a42de742e7c20eeb64699b5785543fea65b... commit: a42de742e7c20eeb64699b5785543fea65b2e8d3 branch: master author: Victor Stinner <vstinner@redhat.com> committer: GitHub <noreply@github.com> date: 2018-11-22T10:25:22+01:00 summary: bpo-35059: Cast void* to PyObject* (GH-10650) Don't pass void* to Python macros: use _PyObject_CAST(). files: M Modules/_threadmodule.c M Modules/gcmodule.c M Objects/unicodeobject.c M Python/hamt.c diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 72d044c08a10..a4ddb87e2b7f 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -1171,8 +1171,9 @@ This function is meant for internal and specialized purposes only.\n\ In most applications `threading.enumerate()` should be used instead."); static void -release_sentinel(void *wr) +release_sentinel(void *wr_raw) { + PyObject *wr = _PyObject_CAST(wr_raw); /* Tricky: this function is called when the current thread state is being deleted. Therefore, only simple C code can safely execute here. */ diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 506ae196d0d0..64140c1b8899 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1847,20 +1847,21 @@ _PyGC_Dump(PyGC_Head *g) functions must always be available */ void -PyObject_GC_Track(void *op) +PyObject_GC_Track(void *op_raw) { - PyObject *obj = (PyObject *)op; + PyObject *op = _PyObject_CAST(op_raw); if (_PyObject_GC_IS_TRACKED(op)) { _PyObject_ASSERT_FAILED_MSG(op, "object already tracked " "by the garbage collector"); } - _PyObject_GC_TRACK(obj); + _PyObject_GC_TRACK(op); } void -PyObject_GC_UnTrack(void *op) +PyObject_GC_UnTrack(void *op_raw) { + PyObject *op = _PyObject_CAST(op_raw); /* Obscure: the Py_TRASHCAN mechanism requires that we be able to * call PyObject_GC_UnTrack twice on an object. */ diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index d22b277a51c8..01049f54e898 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -1171,14 +1171,17 @@ unicode_kind_name(PyObject *unicode) #ifdef Py_DEBUG /* Functions wrapping macros for use in debugger */ -char *_PyUnicode_utf8(void *unicode){ +char *_PyUnicode_utf8(void *unicode_raw){ + PyObject *unicode = _PyObject_CAST(unicode_raw); return PyUnicode_UTF8(unicode); } -void *_PyUnicode_compact_data(void *unicode) { +void *_PyUnicode_compact_data(void *unicode_raw) { + PyObject *unicode = _PyObject_CAST(unicode_raw); return _PyUnicode_COMPACT_DATA(unicode); } -void *_PyUnicode_data(void *unicode){ +void *_PyUnicode_data(void *unicode_raw) { + PyObject *unicode = _PyObject_CAST(unicode_raw); printf("obj %p\n", unicode); printf("compact %d\n", PyUnicode_IS_COMPACT(unicode)); printf("compact ascii %d\n", PyUnicode_IS_COMPACT_ASCII(unicode)); diff --git a/Python/hamt.c b/Python/hamt.c index d734d6ed07fb..aa90d37240a3 100644 --- a/Python/hamt.c +++ b/Python/hamt.c @@ -373,10 +373,11 @@ hamt_node_collision_count(PyHamtNode_Collision *node); #ifdef Py_DEBUG static void -_hamt_node_array_validate(void *o) +_hamt_node_array_validate(void *obj_raw) { - assert(IS_ARRAY_NODE(o)); - PyHamtNode_Array *node = (PyHamtNode_Array*)(o); + PyObject *obj = _PyObject_CAST(obj_raw); + assert(IS_ARRAY_NODE(obj)); + PyHamtNode_Array *node = (PyHamtNode_Array*)obj; Py_ssize_t i = 0, count = 0; for (; i < HAMT_ARRAY_NODE_SIZE; i++) { if (node->a_array[i] != NULL) {
participants (1)
-
Victor Stinner