bpo-35059: Cast void* to PyObject* (GH-10650)

Don't pass void* to Python macros: use _PyObject_CAST().
This commit is contained in:
Victor Stinner 2018-11-22 10:25:22 +01:00 committed by GitHub
parent b37672daf6
commit a42de742e7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 11 deletions

View file

@ -1171,8 +1171,9 @@ This function is meant for internal and specialized purposes only.\n\
In most applications `threading.enumerate()` should be used instead."); In most applications `threading.enumerate()` should be used instead.");
static void 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 /* Tricky: this function is called when the current thread state
is being deleted. Therefore, only simple C code can safely is being deleted. Therefore, only simple C code can safely
execute here. */ execute here. */

View file

@ -1847,20 +1847,21 @@ _PyGC_Dump(PyGC_Head *g)
functions must always be available */ functions must always be available */
void 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)) { if (_PyObject_GC_IS_TRACKED(op)) {
_PyObject_ASSERT_FAILED_MSG(op, _PyObject_ASSERT_FAILED_MSG(op,
"object already tracked " "object already tracked "
"by the garbage collector"); "by the garbage collector");
} }
_PyObject_GC_TRACK(obj); _PyObject_GC_TRACK(op);
} }
void 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 /* Obscure: the Py_TRASHCAN mechanism requires that we be able to
* call PyObject_GC_UnTrack twice on an object. * call PyObject_GC_UnTrack twice on an object.
*/ */

View file

@ -1171,14 +1171,17 @@ unicode_kind_name(PyObject *unicode)
#ifdef Py_DEBUG #ifdef Py_DEBUG
/* Functions wrapping macros for use in debugger */ /* 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); 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); 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("obj %p\n", unicode);
printf("compact %d\n", PyUnicode_IS_COMPACT(unicode)); printf("compact %d\n", PyUnicode_IS_COMPACT(unicode));
printf("compact ascii %d\n", PyUnicode_IS_COMPACT_ASCII(unicode)); printf("compact ascii %d\n", PyUnicode_IS_COMPACT_ASCII(unicode));

View file

@ -373,10 +373,11 @@ hamt_node_collision_count(PyHamtNode_Collision *node);
#ifdef Py_DEBUG #ifdef Py_DEBUG
static void static void
_hamt_node_array_validate(void *o) _hamt_node_array_validate(void *obj_raw)
{ {
assert(IS_ARRAY_NODE(o)); PyObject *obj = _PyObject_CAST(obj_raw);
PyHamtNode_Array *node = (PyHamtNode_Array*)(o); assert(IS_ARRAY_NODE(obj));
PyHamtNode_Array *node = (PyHamtNode_Array*)obj;
Py_ssize_t i = 0, count = 0; Py_ssize_t i = 0, count = 0;
for (; i < HAMT_ARRAY_NODE_SIZE; i++) { for (; i < HAMT_ARRAY_NODE_SIZE; i++) {
if (node->a_array[i] != NULL) { if (node->a_array[i] != NULL) {