]> granicus.if.org Git - sudo/commitdiff
Silence a false positive from the clang static analyzer.
authorTodd C. Miller <Todd.Miller@sudo.ws>
Wed, 21 Mar 2018 20:55:17 +0000 (14:55 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Wed, 21 Mar 2018 20:55:17 +0000 (14:55 -0600)
plugins/sudoers/cvtsudoers.c
plugins/sudoers/gram.c
plugins/sudoers/gram.y
plugins/sudoers/parse.h

index db2b4dd1cc7c018617f214046f0fdcdc5e322b10..c61d09073f265a9521beeb0774e61ee12ad28597 100644 (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:
index ba58037458a940191083686746b75c074538837c..a88dea3a687cbc355ce4f5a0c87cec5c6c3ab3ce 100644 (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);
 
index 59f40b25eed64571cc3fdd1f36da1bc669839952..a6556ec473111a2e3c7864bf26a623b5da32bcda 100644 (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);
 
index 1d7770ff0982c16e58522491fce3af0653203411..229cf5a7c4ca9c5a3c0693dc9a6fbaf3f97b4733 100644 (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);