MFC r300387,r300388,r300389:

r300387:

getnetid(..): consistently fclose fd at the end of the function

This mutes a false positive with cppcheck, but also helps eliminate future
potential issues with this variable

r300388:

Call endnetconfig on nc_handle sooner to avoid leaking nc_handle if tmpnconf
was NULL

This would theoretically happen if the netconfig protocol family and protocol
semantics were never matched.

CID: 978179

r300389:

nis_rpcent: don't leak resultbuf from yp_first(..)/yp_next(..)

If the buffer couldn't be adequately resized to accomodate an additional "\n",
it would leak resultbuf by breaking from the loop early

CID: 1016702
This commit is contained in:
ngie 2016-06-08 14:18:47 +00:00
parent d1adc82bec
commit 47cb06bc0c
3 changed files with 18 additions and 12 deletions

View File

@ -512,6 +512,7 @@ nis_rpcent(void *retval, void *mdata, va_list ap)
sizeof(char *)) {
*errnop = ERANGE;
rv = NS_RETURN;
free(resultbuf);
break;
}
@ -521,6 +522,7 @@ nis_rpcent(void *retval, void *mdata, va_list ap)
if (aliases_size < 1) {
*errnop = ERANGE;
rv = NS_RETURN;
free(resultbuf);
break;
}

View File

@ -253,6 +253,9 @@ getnetid(key, ret)
char *lookup;
int len;
#endif
int rv;
rv = 0;
fd = fopen(NETIDFILE, "r");
if (fd == NULL) {
@ -263,13 +266,11 @@ getnetid(key, ret)
return (0);
#endif
}
for (;;) {
if (fd == NULL)
return (0); /* getnetidyp brings us here */
while (fd != NULL) {
res = fgets(buf, sizeof(buf), fd);
if (res == NULL) {
fclose(fd);
return (0);
rv = 0;
goto done;
}
if (res[0] == '#')
continue;
@ -292,9 +293,8 @@ getnetid(key, ret)
lookup[len] = 0;
strcpy(ret, lookup);
free(lookup);
if (fd != NULL)
fclose(fd);
return (2);
rv = 2;
goto done;
#else /* YP */
#ifdef DEBUG
fprintf(stderr,
@ -320,10 +320,14 @@ getnetid(key, ret)
}
if (strcmp(mkey, key) == 0) {
strcpy(ret, mval);
fclose(fd);
return (1);
rv = 1;
goto done;
}
}
}
done:
if (fd != NULL)
fclose(fd);
return (rv);
}

View File

@ -508,6 +508,7 @@ try_nconf:
hostname = IN6_LOCALHOST_STRING;
}
}
endnetconfig(nc_handle);
if (tmpnconf == NULL) {
rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
mutex_unlock(&loopnconf_lock);
@ -515,7 +516,6 @@ try_nconf:
}
loopnconf = getnetconfigent(tmpnconf->nc_netid);
/* loopnconf is never freed */
endnetconfig(nc_handle);
}
mutex_unlock(&loopnconf_lock);
client = getclnthandle(hostname, loopnconf, NULL);