From cf8d6ef9629dc1bffadfcec251a2ffe30d5addaa Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Sun, 14 Mar 2021 05:17:26 -0700 Subject: bpo-39943: Fix MSVC warnings in sre extension (GH-20508) (cherry picked from commit 06e3a27a3c863495390a07c695171a8e62a6e0d2) Co-authored-by: Ammar Askar --- Modules/_sre.c | 8 ++++++-- Modules/sre_lib.h | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Modules/_sre.c b/Modules/_sre.c index 244e4f1..bdc4278 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -454,7 +454,10 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, return string; err: - PyMem_Del(state->mark); + /* We add an explicit cast here because MSVC has a bug when + compiling C code where it believes that `const void**` cannot be + safely casted to `void*`, see bpo-39943 for details. */ + PyMem_Del((void*) state->mark); state->mark = NULL; if (state->buffer.buf) PyBuffer_Release(&state->buffer); @@ -468,7 +471,8 @@ state_fini(SRE_STATE* state) PyBuffer_Release(&state->buffer); Py_XDECREF(state->string); data_stack_dealloc(state); - PyMem_Del(state->mark); + /* See above PyMem_Del for why we explicitly cast here. */ + PyMem_Del((void*) state->mark); state->mark = NULL; } diff --git a/Modules/sre_lib.h b/Modules/sre_lib.h index 9cc7863..2657d8d 100644 --- a/Modules/sre_lib.h +++ b/Modules/sre_lib.h @@ -448,12 +448,15 @@ do { \ state->data_stack_base += size; \ } while (0) +/* We add an explicit cast to memcpy here because MSVC has a bug when + compiling C code where it believes that `const void**` cannot be + safely casted to `void*`, see bpo-39943 for details. */ #define DATA_STACK_POP(state, data, size, discard) \ do { \ TRACE(("copy data to %p from %" PY_FORMAT_SIZE_T "d " \ "(%" PY_FORMAT_SIZE_T "d)\n", \ data, state->data_stack_base-size, size)); \ - memcpy(data, state->data_stack+state->data_stack_base-size, size); \ + memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \ if (discard) \ state->data_stack_base -= size; \ } while (0) -- cgit v0.12