diff options
author | Günther Deschner <gd@samba.org> | 2008-01-16 15:51:52 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2008-01-16 16:06:15 +0100 |
commit | b7a06b54e0a58c4cd6c5351b1e4a0a2c253cfea1 (patch) | |
tree | 37b5ff1b7524a855001c8fd2aec56e4696f3cb70 /source | |
parent | aebecd7462733b56457540423354ba249fd52808 (diff) | |
download | samba-b7a06b54e0a58c4cd6c5351b1e4a0a2c253cfea1.tar.gz samba-b7a06b54e0a58c4cd6c5351b1e4a0a2c253cfea1.tar.xz samba-b7a06b54e0a58c4cd6c5351b1e4a0a2c253cfea1.zip |
Fix memleak in ads_build_path().
Guenther
Diffstat (limited to 'source')
-rw-r--r-- | source/libads/ads_struct.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/source/libads/ads_struct.c b/source/libads/ads_struct.c index 041878916ec..44bcdf76eaf 100644 --- a/source/libads/ads_struct.c +++ b/source/libads/ads_struct.c @@ -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); } } |