]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: fix a few memory usage errors
authorDirkjan Bussink <d.bussink@gmail.com>
Mon, 28 Apr 2014 22:57:16 +0000 (22:57 +0000)
committerWilly Tarreau <w@1wt.eu>
Thu, 15 May 2014 06:06:57 +0000 (08:06 +0200)
These are either use after free errors or small leaks where memory
is not free'd after some error state is detected.

src/auth.c
src/cfgparse.c
src/haproxy.c
src/pattern.c

index 2a53deb21fcd5230a7fd543f56c33ab20455a7cf..1069c5b76b286db782d0265bcfe0ba642ac91941 100644 (file)
@@ -134,6 +134,7 @@ int userlist_postinit()
                                if (!ag) {
                                        Alert("userlist '%s': no such group '%s' specified in user '%s'\n",
                                              curuserlist->name, group, curuser->user);
+                                       free(groups);
                                        return ERR_ALERT | ERR_FATAL;
                                }
 
@@ -142,7 +143,8 @@ int userlist_postinit()
                                if (!grl) {
                                        Alert("userlist '%s': no more memory when trying to allocate the user groups.\n",
                                              curuserlist->name);
-                                       return  ERR_ALERT | ERR_FATAL;
+                                       free(groups);
+                                       return ERR_ALERT | ERR_FATAL;
                                }
 
                                grl->group = ag;
index 9ec69a1f83b56be60987343ab4340428780bef59..eb7ec201647e47232b0f1ecac12ec9b2c63b5c7a 100644 (file)
@@ -1578,8 +1578,6 @@ static int create_cond_regex_rule(const char *file, int line,
        if (dir == SMP_OPT_DIR_REQ && warnif_misplaced_reqxxx(px, file, line, cmd))
                err_code |= ERR_WARN;
 
-       free(errmsg);
-       return err_code;
  err:
        free(errmsg);
        free(preg);
index 77871b055069993f09bb573ce0ba8d4a9f6a7b33..060a155fb28bb557e04df27f11680d9e6682c289 100644 (file)
@@ -1610,6 +1610,8 @@ int main(int argc, char **argv)
                        exit(0); /* parent must leave */
                }
 
+               free(children);
+               children = NULL;
                /* if we're NOT in QUIET mode, we should now close the 3 first FDs to ensure
                 * that we can detach from the TTY. We MUST NOT do it in other cases since
                 * it would have already be done, and 0-2 would have been affected to listening
index 51981fd9833d173f39ec5226cee332dc787fb09a..1d7e4d8544fe710c57f73d43524aed170dc3a68b 100644 (file)
@@ -1076,8 +1076,8 @@ int pat_idx_list_reg(struct pattern_expr *expr, struct pattern *pat, char **err)
 
        /* compile regex */
        if (!regex_comp(pat->ptr.str, patl->pat.ptr.reg, !(expr->mflags & PAT_MF_IGNORE_CASE), 0, err)) {
-               free(patl);
                free(patl->pat.ptr.reg);
+               free(patl);
                return 0;
        }
 
@@ -1458,14 +1458,14 @@ int pat_ref_delete(struct pat_ref *ref, const char *key)
        /* delete pattern from reference */
        list_for_each_entry_safe(elt, safe, &ref->head, list) {
                if (strcmp(key, elt->pattern) == 0) {
+                       list_for_each_entry(expr, &ref->pat, list)
+                               pattern_delete(expr, elt);
+
                        LIST_DEL(&elt->list);
                        free(elt->sample);
                        free(elt->pattern);
                        free(elt);
 
-                       list_for_each_entry(expr, &ref->pat, list)
-                               pattern_delete(expr, elt);
-
                        found = 1;
                }
        }