summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2018-11-22 09:25:22 (GMT)
committerGitHub <noreply@github.com>2018-11-22 09:25:22 (GMT)
commita42de742e7c20eeb64699b5785543fea65b2e8d3 (patch)
tree1cb5a0b7e6d6e12846b51dbb51a080a781209ec4
parentb37672daf61740fe1ff9d805f6d74bc5ef04012b (diff)
downloadcpython-a42de742e7c20eeb64699b5785543fea65b2e8d3.zip
cpython-a42de742e7c20eeb64699b5785543fea65b2e8d3.tar.gz
cpython-a42de742e7c20eeb64699b5785543fea65b2e8d3.tar.bz2
bpo-35059: Cast void* to PyObject* (GH-10650)
Don't pass void* to Python macros: use _PyObject_CAST().
-rw-r--r--Modules/_threadmodule.c3
-rw-r--r--Modules/gcmodule.c9
-rw-r--r--Objects/unicodeobject.c9
-rw-r--r--Python/hamt.c7
4 files changed, 17 insertions, 11 deletions
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index 72d044c..a4ddb87 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 506ae19..64140c1 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 d22b277..01049f5 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 d734d6e..aa90d37 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) {