Silence a false positive from the clang static analyzer.

This commit is contained in:
Todd C. Miller
2018-03-21 14:55:17 -06:00
parent fbed17e1a4
commit 821e8a07da
4 changed files with 24 additions and 24 deletions

View File

@@ -762,7 +762,7 @@ static void
filter_defaults(void)
{
struct defaults *def, *next;
struct member_list *binding = NULL;
struct member_list *prev_binding = NULL;
debug_decl(filter_defaults, SUDOERS_DEBUG_DEFAULTS)
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
@@ -770,17 +770,17 @@ filter_defaults(void)
case DEFAULTS_USER:
if (!userlist_matches_filter(def->binding)) {
TAILQ_REMOVE(&defaults, def, entries);
binding = free_default(def, binding);
free_default(def, &prev_binding);
} else {
binding = def->binding;
prev_binding = def->binding;
}
break;
case DEFAULTS_HOST:
if (!hostlist_matches_filter(def->binding)) {
TAILQ_REMOVE(&defaults, def, entries);
binding = free_default(def, binding);
free_default(def, &prev_binding);
} else {
binding = def->binding;
prev_binding = def->binding;
}
break;
default:

View File

@@ -871,13 +871,13 @@ free_members(struct member_list *members)
debug_return;
}
struct member_list *
free_default(struct defaults *def, struct member_list *binding)
void
free_default(struct defaults *def, struct member_list **binding)
{
debug_decl(free_default, SUDOERS_DEBUG_PARSER)
if (def->binding != binding) {
binding = def->binding;
if (def->binding != *binding) {
*binding = def->binding;
free_members(def->binding);
free(def->binding);
}
@@ -886,14 +886,14 @@ free_default(struct defaults *def, struct member_list *binding)
free(def->val);
free(def);
debug_return_ptr(binding);
debug_return;
}
void
free_privilege(struct privilege *priv)
{
struct member_list *runasuserlist = NULL, *runasgrouplist = NULL;
struct member_list *binding = NULL;
struct member_list *prev_binding = NULL;
struct cmndspec *cs;
struct defaults *def;
#ifdef HAVE_SELINUX
@@ -946,7 +946,7 @@ free_privilege(struct privilege *priv)
}
while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) {
TAILQ_REMOVE(&priv->defaults, def, entries);
binding = free_default(def, binding);
free_default(def, &prev_binding);
}
free(priv);
@@ -983,7 +983,7 @@ free_userspec(struct userspec *us)
bool
init_parser(const char *path, bool quiet)
{
struct member_list *binding = NULL;
struct member_list *prev_binding = NULL;
struct defaults *def;
struct userspec *us;
bool ret = true;
@@ -996,7 +996,7 @@ init_parser(const char *path, bool quiet)
TAILQ_INIT(&userspecs);
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
binding = free_default(def, binding);
free_default(def, &prev_binding);
}
TAILQ_INIT(&defaults);

View File

@@ -1099,13 +1099,13 @@ free_members(struct member_list *members)
debug_return;
}
struct member_list *
free_default(struct defaults *def, struct member_list *binding)
void
free_default(struct defaults *def, struct member_list **binding)
{
debug_decl(free_default, SUDOERS_DEBUG_PARSER)
if (def->binding != binding) {
binding = def->binding;
if (def->binding != *binding) {
*binding = def->binding;
free_members(def->binding);
free(def->binding);
}
@@ -1114,14 +1114,14 @@ free_default(struct defaults *def, struct member_list *binding)
free(def->val);
free(def);
debug_return_ptr(binding);
debug_return;
}
void
free_privilege(struct privilege *priv)
{
struct member_list *runasuserlist = NULL, *runasgrouplist = NULL;
struct member_list *binding = NULL;
struct member_list *prev_binding = NULL;
struct cmndspec *cs;
struct defaults *def;
#ifdef HAVE_SELINUX
@@ -1174,7 +1174,7 @@ free_privilege(struct privilege *priv)
}
while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) {
TAILQ_REMOVE(&priv->defaults, def, entries);
binding = free_default(def, binding);
free_default(def, &prev_binding);
}
free(priv);
@@ -1211,7 +1211,7 @@ free_userspec(struct userspec *us)
bool
init_parser(const char *path, bool quiet)
{
struct member_list *binding = NULL;
struct member_list *prev_binding = NULL;
struct defaults *def;
struct userspec *us;
bool ret = true;
@@ -1224,7 +1224,7 @@ init_parser(const char *path, bool quiet)
TAILQ_INIT(&userspecs);
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
binding = free_default(def, binding);
free_default(def, &prev_binding);
}
TAILQ_INIT(&defaults);

View File

@@ -269,7 +269,7 @@ void free_member(struct member *m);
void free_members(struct member_list *members);
void free_privilege(struct privilege *priv);
void free_userspec(struct userspec *us);
struct member_list *free_default(struct defaults *def, struct member_list *binding);
void free_default(struct defaults *def, struct member_list **binding);
/* match_addr.c */
bool addr_matches(char *n);