diff options
author | Bénédikt Tran <10796600+picnixz@users.noreply.github.com> | 2024-09-13 11:26:19 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-13 11:26:19 (GMT) |
commit | e49d1b44d3ef2542c0ae165e14a7e5ffbc32b2d1 (patch) | |
tree | a74ffa608590672a606e89d17aca1035cc37d938 | |
parent | 432bf31327c6b9647acb8bdb0eac2d392fd9f60a (diff) | |
download | cpython-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.c | 47 |
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; } |