Skip to content

Commit e49d1b4

Browse files
authored
gh-124044: protect macros expansions in _cursesmodules.c using do { ... } while (0) (#124045)
1 parent 432bf31 commit e49d1b4

File tree

1 file changed

+28
-19
lines changed

1 file changed

+28
-19
lines changed

Modules/_cursesmodule.c

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -182,22 +182,31 @@ static char *screen_encoding = NULL;
182182

183183
/* Utility Macros */
184184
#define PyCursesSetupTermCalled \
185-
if (initialised_setupterm != TRUE) { \
186-
PyErr_SetString(PyCursesError, \
187-
"must call (at least) setupterm() first"); \
188-
return 0; }
185+
do { \
186+
if (initialised_setupterm != TRUE) { \
187+
PyErr_SetString(PyCursesError, \
188+
"must call (at least) setupterm() first"); \
189+
return 0; \
190+
} \
191+
} while (0)
189192

190-
#define PyCursesInitialised \
191-
if (initialised != TRUE) { \
192-
PyErr_SetString(PyCursesError, \
193-
"must call initscr() first"); \
194-
return 0; }
193+
#define PyCursesInitialised \
194+
do { \
195+
if (initialised != TRUE) { \
196+
PyErr_SetString(PyCursesError, \
197+
"must call initscr() first"); \
198+
return 0; \
199+
} \
200+
} while (0)
195201

196202
#define PyCursesInitialisedColor \
197-
if (initialisedcolors != TRUE) { \
198-
PyErr_SetString(PyCursesError, \
199-
"must call start_color() first"); \
200-
return 0; }
203+
do { \
204+
if (initialisedcolors != TRUE) { \
205+
PyErr_SetString(PyCursesError, \
206+
"must call start_color() first"); \
207+
return 0; \
208+
} \
209+
} while (0)
201210

202211
/* Utility Functions */
203212

@@ -2633,12 +2642,12 @@ PyTypeObject PyCursesWindow_Type = {
26332642

26342643
#define NoArgNoReturnFunctionBody(X) \
26352644
{ \
2636-
PyCursesInitialised \
2645+
PyCursesInitialised; \
26372646
return PyCursesCheckERR(X(), # X); }
26382647

26392648
#define NoArgOrFlagNoReturnFunctionBody(X, flag) \
26402649
{ \
2641-
PyCursesInitialised \
2650+
PyCursesInitialised; \
26422651
if (flag) \
26432652
return PyCursesCheckERR(X(), # X); \
26442653
else \
@@ -2647,23 +2656,23 @@ PyTypeObject PyCursesWindow_Type = {
26472656

26482657
#define NoArgReturnIntFunctionBody(X) \
26492658
{ \
2650-
PyCursesInitialised \
2659+
PyCursesInitialised; \
26512660
return PyLong_FromLong((long) X()); }
26522661

26532662

26542663
#define NoArgReturnStringFunctionBody(X) \
26552664
{ \
2656-
PyCursesInitialised \
2665+
PyCursesInitialised; \
26572666
return PyBytes_FromString(X()); }
26582667

26592668
#define NoArgTrueFalseFunctionBody(X) \
26602669
{ \
2661-
PyCursesInitialised \
2670+
PyCursesInitialised; \
26622671
return PyBool_FromLong(X()); }
26632672

26642673
#define NoArgNoReturnVoidFunctionBody(X) \
26652674
{ \
2666-
PyCursesInitialised \
2675+
PyCursesInitialised; \
26672676
X(); \
26682677
Py_RETURN_NONE; }
26692678

0 commit comments

Comments
 (0)