shared: conf-parser - don't leak memory on error in DEFINE_CONFIG_PARSE_ENUMV
Found by Coverity. Fixes CID #1237746.
This commit is contained in:
parent
9dedfe7f66
commit
77c10205bb
|
@ -169,7 +169,8 @@ int log_syntax_internal(const char *unit, int level,
|
|||
void *data, \
|
||||
void *userdata) { \
|
||||
\
|
||||
type **enums = data, *xs, x, *ys; \
|
||||
type **enums = data, x, *ys; \
|
||||
_cleanup_free_ type *xs = NULL; \
|
||||
const char *word, *state; \
|
||||
size_t l, i = 0; \
|
||||
\
|
||||
|
@ -186,6 +187,7 @@ int log_syntax_internal(const char *unit, int level,
|
|||
\
|
||||
FOREACH_WORD(word, l, rvalue, state) { \
|
||||
_cleanup_free_ char *en = NULL; \
|
||||
type *new_xs; \
|
||||
\
|
||||
en = strndup(word, l); \
|
||||
if (!en) \
|
||||
|
@ -211,8 +213,10 @@ int log_syntax_internal(const char *unit, int level,
|
|||
continue; \
|
||||
\
|
||||
*(xs + i) = x; \
|
||||
xs = realloc(xs, (++i + 1) * sizeof(type)); \
|
||||
if (!xs) \
|
||||
new_xs = realloc(xs, (++i + 1) * sizeof(type)); \
|
||||
if (new_xs) \
|
||||
xs = new_xs; \
|
||||
else \
|
||||
return -ENOMEM; \
|
||||
\
|
||||
*(xs + i) = invalid; \
|
||||
|
@ -220,5 +224,7 @@ int log_syntax_internal(const char *unit, int level,
|
|||
\
|
||||
free(*enums); \
|
||||
*enums = xs; \
|
||||
xs = NULL; \
|
||||
\
|
||||
return 0; \
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue