Silence a false positive from the clang static analyzer.
This commit is contained in:
@@ -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:
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user