Fix memleak in ads_build_path().
authorGünther Deschner <gd@samba.org>
Wed, 16 Jan 2008 14:51:52 +0000 (15:51 +0100)
committerGünther Deschner <gd@samba.org>
Wed, 16 Jan 2008 15:06:15 +0000 (16:06 +0100)
Guenther

source/libads/ads_struct.c

index 041878916ec742103dcf2f8f3995f6c2b3cf57d8..44bcdf76eaf219ee6d298a4ddc8af9c233e7a465 100644 (file)
@@ -32,18 +32,23 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
        
        r = SMB_STRDUP(realm);
 
-       if (!r || !*r)
+       if (!r || !*r) {
                return r;
+       }
 
-       for (p=r; *p; p++)
-               if (strchr(sep, *p))
+       for (p=r; *p; p++) {
+               if (strchr(sep, *p)) {
                        numbits++;
+               }
+       }
 
        len = (numbits+1)*(strlen(field)+1) + strlen(r) + 1;
 
        ret = (char *)SMB_MALLOC(len);
-       if (!ret)
+       if (!ret) {
+               free(r);
                return NULL;
+       }
 
        strlcpy(ret,field, len);
        p=strtok(r,sep); 
@@ -57,7 +62,8 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
                        else
                                asprintf(&s, "%s,%s%s", ret, field, p);
                        free(ret);
-                       ret = s;
+                       ret = SMB_STRDUP(s);
+                       free(s);
                }
        }