Silence a false positive from the clang static analyzer.
This commit is contained in:
@@ -762,7 +762,7 @@ static void
|
|||||||
filter_defaults(void)
|
filter_defaults(void)
|
||||||
{
|
{
|
||||||
struct defaults *def, *next;
|
struct defaults *def, *next;
|
||||||
struct member_list *binding = NULL;
|
struct member_list *prev_binding = NULL;
|
||||||
debug_decl(filter_defaults, SUDOERS_DEBUG_DEFAULTS)
|
debug_decl(filter_defaults, SUDOERS_DEBUG_DEFAULTS)
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
||||||
@@ -770,17 +770,17 @@ filter_defaults(void)
|
|||||||
case DEFAULTS_USER:
|
case DEFAULTS_USER:
|
||||||
if (!userlist_matches_filter(def->binding)) {
|
if (!userlist_matches_filter(def->binding)) {
|
||||||
TAILQ_REMOVE(&defaults, def, entries);
|
TAILQ_REMOVE(&defaults, def, entries);
|
||||||
binding = free_default(def, binding);
|
free_default(def, &prev_binding);
|
||||||
} else {
|
} else {
|
||||||
binding = def->binding;
|
prev_binding = def->binding;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DEFAULTS_HOST:
|
case DEFAULTS_HOST:
|
||||||
if (!hostlist_matches_filter(def->binding)) {
|
if (!hostlist_matches_filter(def->binding)) {
|
||||||
TAILQ_REMOVE(&defaults, def, entries);
|
TAILQ_REMOVE(&defaults, def, entries);
|
||||||
binding = free_default(def, binding);
|
free_default(def, &prev_binding);
|
||||||
} else {
|
} else {
|
||||||
binding = def->binding;
|
prev_binding = def->binding;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -871,13 +871,13 @@ free_members(struct member_list *members)
|
|||||||
debug_return;
|
debug_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct member_list *
|
void
|
||||||
free_default(struct defaults *def, struct member_list *binding)
|
free_default(struct defaults *def, struct member_list **binding)
|
||||||
{
|
{
|
||||||
debug_decl(free_default, SUDOERS_DEBUG_PARSER)
|
debug_decl(free_default, SUDOERS_DEBUG_PARSER)
|
||||||
|
|
||||||
if (def->binding != binding) {
|
if (def->binding != *binding) {
|
||||||
binding = def->binding;
|
*binding = def->binding;
|
||||||
free_members(def->binding);
|
free_members(def->binding);
|
||||||
free(def->binding);
|
free(def->binding);
|
||||||
}
|
}
|
||||||
@@ -886,14 +886,14 @@ free_default(struct defaults *def, struct member_list *binding)
|
|||||||
free(def->val);
|
free(def->val);
|
||||||
free(def);
|
free(def);
|
||||||
|
|
||||||
debug_return_ptr(binding);
|
debug_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
free_privilege(struct privilege *priv)
|
free_privilege(struct privilege *priv)
|
||||||
{
|
{
|
||||||
struct member_list *runasuserlist = NULL, *runasgrouplist = NULL;
|
struct member_list *runasuserlist = NULL, *runasgrouplist = NULL;
|
||||||
struct member_list *binding = NULL;
|
struct member_list *prev_binding = NULL;
|
||||||
struct cmndspec *cs;
|
struct cmndspec *cs;
|
||||||
struct defaults *def;
|
struct defaults *def;
|
||||||
#ifdef HAVE_SELINUX
|
#ifdef HAVE_SELINUX
|
||||||
@@ -946,7 +946,7 @@ free_privilege(struct privilege *priv)
|
|||||||
}
|
}
|
||||||
while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) {
|
while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) {
|
||||||
TAILQ_REMOVE(&priv->defaults, def, entries);
|
TAILQ_REMOVE(&priv->defaults, def, entries);
|
||||||
binding = free_default(def, binding);
|
free_default(def, &prev_binding);
|
||||||
}
|
}
|
||||||
free(priv);
|
free(priv);
|
||||||
|
|
||||||
@@ -983,7 +983,7 @@ free_userspec(struct userspec *us)
|
|||||||
bool
|
bool
|
||||||
init_parser(const char *path, bool quiet)
|
init_parser(const char *path, bool quiet)
|
||||||
{
|
{
|
||||||
struct member_list *binding = NULL;
|
struct member_list *prev_binding = NULL;
|
||||||
struct defaults *def;
|
struct defaults *def;
|
||||||
struct userspec *us;
|
struct userspec *us;
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
@@ -996,7 +996,7 @@ init_parser(const char *path, bool quiet)
|
|||||||
TAILQ_INIT(&userspecs);
|
TAILQ_INIT(&userspecs);
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
||||||
binding = free_default(def, binding);
|
free_default(def, &prev_binding);
|
||||||
}
|
}
|
||||||
TAILQ_INIT(&defaults);
|
TAILQ_INIT(&defaults);
|
||||||
|
|
||||||
|
@@ -1099,13 +1099,13 @@ free_members(struct member_list *members)
|
|||||||
debug_return;
|
debug_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct member_list *
|
void
|
||||||
free_default(struct defaults *def, struct member_list *binding)
|
free_default(struct defaults *def, struct member_list **binding)
|
||||||
{
|
{
|
||||||
debug_decl(free_default, SUDOERS_DEBUG_PARSER)
|
debug_decl(free_default, SUDOERS_DEBUG_PARSER)
|
||||||
|
|
||||||
if (def->binding != binding) {
|
if (def->binding != *binding) {
|
||||||
binding = def->binding;
|
*binding = def->binding;
|
||||||
free_members(def->binding);
|
free_members(def->binding);
|
||||||
free(def->binding);
|
free(def->binding);
|
||||||
}
|
}
|
||||||
@@ -1114,14 +1114,14 @@ free_default(struct defaults *def, struct member_list *binding)
|
|||||||
free(def->val);
|
free(def->val);
|
||||||
free(def);
|
free(def);
|
||||||
|
|
||||||
debug_return_ptr(binding);
|
debug_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
free_privilege(struct privilege *priv)
|
free_privilege(struct privilege *priv)
|
||||||
{
|
{
|
||||||
struct member_list *runasuserlist = NULL, *runasgrouplist = NULL;
|
struct member_list *runasuserlist = NULL, *runasgrouplist = NULL;
|
||||||
struct member_list *binding = NULL;
|
struct member_list *prev_binding = NULL;
|
||||||
struct cmndspec *cs;
|
struct cmndspec *cs;
|
||||||
struct defaults *def;
|
struct defaults *def;
|
||||||
#ifdef HAVE_SELINUX
|
#ifdef HAVE_SELINUX
|
||||||
@@ -1174,7 +1174,7 @@ free_privilege(struct privilege *priv)
|
|||||||
}
|
}
|
||||||
while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) {
|
while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) {
|
||||||
TAILQ_REMOVE(&priv->defaults, def, entries);
|
TAILQ_REMOVE(&priv->defaults, def, entries);
|
||||||
binding = free_default(def, binding);
|
free_default(def, &prev_binding);
|
||||||
}
|
}
|
||||||
free(priv);
|
free(priv);
|
||||||
|
|
||||||
@@ -1211,7 +1211,7 @@ free_userspec(struct userspec *us)
|
|||||||
bool
|
bool
|
||||||
init_parser(const char *path, bool quiet)
|
init_parser(const char *path, bool quiet)
|
||||||
{
|
{
|
||||||
struct member_list *binding = NULL;
|
struct member_list *prev_binding = NULL;
|
||||||
struct defaults *def;
|
struct defaults *def;
|
||||||
struct userspec *us;
|
struct userspec *us;
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
@@ -1224,7 +1224,7 @@ init_parser(const char *path, bool quiet)
|
|||||||
TAILQ_INIT(&userspecs);
|
TAILQ_INIT(&userspecs);
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
TAILQ_FOREACH_SAFE(def, &defaults, entries, next) {
|
||||||
binding = free_default(def, binding);
|
free_default(def, &prev_binding);
|
||||||
}
|
}
|
||||||
TAILQ_INIT(&defaults);
|
TAILQ_INIT(&defaults);
|
||||||
|
|
||||||
|
@@ -269,7 +269,7 @@ void free_member(struct member *m);
|
|||||||
void free_members(struct member_list *members);
|
void free_members(struct member_list *members);
|
||||||
void free_privilege(struct privilege *priv);
|
void free_privilege(struct privilege *priv);
|
||||||
void free_userspec(struct userspec *us);
|
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 */
|
/* match_addr.c */
|
||||||
bool addr_matches(char *n);
|
bool addr_matches(char *n);
|
||||||
|
Reference in New Issue
Block a user