summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBénédikt Tran <10796600+picnixz@users.noreply.github.com>2024-09-13 11:26:19 (GMT)
committerGitHub <noreply@github.com>2024-09-13 11:26:19 (GMT)
commite49d1b44d3ef2542c0ae165e14a7e5ffbc32b2d1 (patch)
treea74ffa608590672a606e89d17aca1035cc37d938
parent432bf31327c6b9647acb8bdb0eac2d392fd9f60a (diff)
downloadcpython-e49d1b44d3ef2542c0ae165e14a7e5ffbc32b2d1.zip
cpython-e49d1b44d3ef2542c0ae165e14a7e5ffbc32b2d1.tar.gz
cpython-e49d1b44d3ef2542c0ae165e14a7e5ffbc32b2d1.tar.bz2
gh-124044: protect macros expansions in `_cursesmodules.c` using `do { ... } while (0)` (#124045)
-rw-r--r--Modules/_cursesmodule.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index be31cb4..b1fd839 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -182,22 +182,31 @@ static char *screen_encoding = NULL;
/* Utility Macros */
#define PyCursesSetupTermCalled \
- if (initialised_setupterm != TRUE) { \
- PyErr_SetString(PyCursesError, \
- "must call (at least) setupterm() first"); \
- return 0; }
+ do { \
+ if (initialised_setupterm != TRUE) { \
+ PyErr_SetString(PyCursesError, \
+ "must call (at least) setupterm() first"); \
+ return 0; \
+ } \
+ } while (0)
-#define PyCursesInitialised \
- if (initialised != TRUE) { \
- PyErr_SetString(PyCursesError, \
- "must call initscr() first"); \
- return 0; }
+#define PyCursesInitialised \
+ do { \
+ if (initialised != TRUE) { \
+ PyErr_SetString(PyCursesError, \
+ "must call initscr() first"); \
+ return 0; \
+ } \
+ } while (0)
#define PyCursesInitialisedColor \
- if (initialisedcolors != TRUE) { \
- PyErr_SetString(PyCursesError, \
- "must call start_color() first"); \
- return 0; }
+ do { \
+ if (initialisedcolors != TRUE) { \
+ PyErr_SetString(PyCursesError, \
+ "must call start_color() first"); \
+ return 0; \
+ } \
+ } while (0)
/* Utility Functions */
@@ -2633,12 +2642,12 @@ PyTypeObject PyCursesWindow_Type = {
#define NoArgNoReturnFunctionBody(X) \
{ \
- PyCursesInitialised \
+ PyCursesInitialised; \
return PyCursesCheckERR(X(), # X); }
#define NoArgOrFlagNoReturnFunctionBody(X, flag) \
{ \
- PyCursesInitialised \
+ PyCursesInitialised; \
if (flag) \
return PyCursesCheckERR(X(), # X); \
else \
@@ -2647,23 +2656,23 @@ PyTypeObject PyCursesWindow_Type = {
#define NoArgReturnIntFunctionBody(X) \
{ \
- PyCursesInitialised \
+ PyCursesInitialised; \
return PyLong_FromLong((long) X()); }
#define NoArgReturnStringFunctionBody(X) \
{ \
- PyCursesInitialised \
+ PyCursesInitialised; \
return PyBytes_FromString(X()); }
#define NoArgTrueFalseFunctionBody(X) \
{ \
- PyCursesInitialised \
+ PyCursesInitialised; \
return PyBool_FromLong(X()); }
#define NoArgNoReturnVoidFunctionBody(X) \
{ \
- PyCursesInitialised \
+ PyCursesInitialised; \
X(); \
Py_RETURN_NONE; }