gh-121165: protect macro expansion of `ADJUST_INDICES` with do-while(0) (#121166)

This commit is contained in:
Bénédikt Tran 2024-07-02 12:57:51 +02:00 committed by GitHub
parent 15232a0819
commit 6343486eb6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 26 deletions

View File

@ -433,18 +433,23 @@ parse_args_finds_byte(const char *function_name, PyObject **subobj, char *byte)
/* helper macro to fixup start/end slice values */ /* helper macro to fixup start/end slice values */
#define ADJUST_INDICES(start, end, len) \ #define ADJUST_INDICES(start, end, len) \
if (end > len) \ do { \
if (end > len) { \
end = len; \ end = len; \
} \
else if (end < 0) { \ else if (end < 0) { \
end += len; \ end += len; \
if (end < 0) \ if (end < 0) { \
end = 0; \ end = 0; \
} \ } \
} \
if (start < 0) { \ if (start < 0) { \
start += len; \ start += len; \
if (start < 0) \ if (start < 0) { \
start = 0; \ start = 0; \
} } \
} \
} while (0)
Py_LOCAL_INLINE(Py_ssize_t) Py_LOCAL_INLINE(Py_ssize_t)
find_internal(const char *str, Py_ssize_t len, find_internal(const char *str, Py_ssize_t len,

View File

@ -9316,18 +9316,23 @@ _PyUnicode_TransformDecimalAndSpaceToASCII(PyObject *unicode)
/* helper macro to fixup start/end slice values */ /* helper macro to fixup start/end slice values */
#define ADJUST_INDICES(start, end, len) \ #define ADJUST_INDICES(start, end, len) \
if (end > len) \ do { \
if (end > len) { \
end = len; \ end = len; \
} \
else if (end < 0) { \ else if (end < 0) { \
end += len; \ end += len; \
if (end < 0) \ if (end < 0) { \
end = 0; \ end = 0; \
} \ } \
} \
if (start < 0) { \ if (start < 0) { \
start += len; \ start += len; \
if (start < 0) \ if (start < 0) { \
start = 0; \ start = 0; \
} } \
} \
} while (0)
static Py_ssize_t static Py_ssize_t
any_find_slice(PyObject* s1, PyObject* s2, any_find_slice(PyObject* s1, PyObject* s2,