diff options
author | Jeremy Allison <jra@samba.org> | 2007-09-08 05:18:08 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2007-09-08 05:18:08 +0000 |
commit | 4a05e496176387bb54b2cb9b71509b7ca2a3a9dd (patch) | |
tree | 389a41206d9ac19d0ffeb0529131c80d4957e202 | |
parent | 1c03dd169837a94abcbc7240bd782d5f872092c1 (diff) | |
download | samba-4a05e496176387bb54b2cb9b71509b7ca2a3a9dd.tar.gz samba-4a05e496176387bb54b2cb9b71509b7ca2a3a9dd.tar.xz samba-4a05e496176387bb54b2cb9b71509b7ca2a3a9dd.zip |
r25022: Fix coverity #395. Resource leak on error.
Jeremy.
-rw-r--r-- | source/nsswitch/wins.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/source/nsswitch/wins.c b/source/nsswitch/wins.c index afc1639f630..8e4d75e545a 100644 --- a/source/nsswitch/wins.c +++ b/source/nsswitch/wins.c @@ -315,8 +315,10 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, namelen = strlen(name) + 1; - if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL) + if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL) { + free(ip_list); return NSS_STATUS_TRYAGAIN; + } memcpy(he->h_name, name, namelen); @@ -325,24 +327,29 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he, if ((i = (unsigned long)(buffer) % sizeof(char*)) != 0) i = sizeof(char*) - i; - if (get_static(&buffer, &buflen, i) == NULL) + if (get_static(&buffer, &buflen, i) == NULL) { + free(ip_list); return NSS_STATUS_TRYAGAIN; + } if ((he->h_addr_list = (char **)get_static( - &buffer, &buflen, (count + 1) * sizeof(char *))) == NULL) + &buffer, &buflen, (count + 1) * sizeof(char *))) == NULL) { + free(ip_list); return NSS_STATUS_TRYAGAIN; + } for (i = 0; i < count; i++) { if ((he->h_addr_list[i] = get_static(&buffer, &buflen, - INADDRSZ)) == NULL) + INADDRSZ)) == NULL) { + free(ip_list); return NSS_STATUS_TRYAGAIN; + } memcpy(he->h_addr_list[i], &ip_list[i], INADDRSZ); } he->h_addr_list[count] = NULL; - if (ip_list) - free(ip_list); + free(ip_list); /* Set h_addr_type and h_length */ |