Skip to content

Commit c7cd37b

Browse files
committed
Fix memory leak in SET_ITEM macro in initconfig.c when expression evaluation fails
1 parent b5e4c46 commit c7cd37b

2 files changed

Lines changed: 11 additions & 10 deletions

File tree

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix memory leak in ``SET_ITEM`` macro in ``initconfig.c`` when expression
2+
evaluation fails

Python/initconfig.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -508,17 +508,16 @@ _Py_COMP_DIAG_IGNORE_DEPR_DECLS
508508
}
509509

510510
#define SET_ITEM(KEY, EXPR) \
511-
do { \
512-
obj = (EXPR); \
513-
if (obj == NULL) { \
514-
return NULL; \
515-
} \
516-
int res = PyDict_SetItemString(dict, (KEY), obj); \
511+
do { \
512+
obj = (EXPR); \
513+
if (obj == NULL) \
514+
goto fail; \
515+
if (PyDict_SetItemString(dict, (KEY), obj) < 0) { \
517516
Py_DECREF(obj); \
518-
if (res < 0) { \
519-
goto fail; \
520-
} \
521-
} while (0)
517+
goto fail; \
518+
} \
519+
Py_DECREF(obj); \
520+
} while (0)
522521
#define SET_ITEM_INT(VAR) \
523522
SET_ITEM(#VAR, PyLong_FromLong(VAR))
524523
#define FROM_STRING(STR) \

0 commit comments

Comments
 (0)