summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-09-03 13:46:36 +0200
committerDaniel Stenberg <daniel@haxx.se>2019-09-03 23:00:51 +0200
commit158dcb9f86986bebdb39ecd44237f112c72d761c (patch)
tree4ed17d0bcba49c55577dd7dd5c86d8e9f68cd821
parent4ac288400355743c2f2a7a302daee57751d1238f (diff)
downloadcurl-158dcb9f86986bebdb39ecd44237f112c72d761c.tar.gz
netrc: free 'home' on error
Follow-up to f9c7ba9096ec2 Coverity CID 1453474 Closes #4291
-rw-r--r--lib/netrc.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/netrc.c b/lib/netrc.c
index bceca53f2..c74065e81 100644
--- a/lib/netrc.c
+++ b/lib/netrc.c
@@ -218,8 +218,10 @@ int Curl_parsenetrc(const char *host,
char *filealloc = NULL;
if(!netrcfile) {
- char *home = curl_getenv("HOME"); /* portable environment reader */
- if(home) {
+ char *home = NULL;
+ char *homea = curl_getenv("HOME"); /* portable environment reader */
+ if(homea) {
+ home = homea;
#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID)
}
else {
@@ -227,9 +229,7 @@ int Curl_parsenetrc(const char *host,
char pwbuf[1024];
if(!getpwuid_r(geteuid(), &pw, pwbuf, sizeof(pwbuf), &pw_res)
&& pw_res) {
- home = strdup(pw.pw_dir);
- if(!home)
- return -1;
+ home = pw.pw_dir;
}
#elif defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
}
@@ -247,8 +247,10 @@ int Curl_parsenetrc(const char *host,
memory) */
filealloc = curl_maprintf("%s%s.netrc", home, DIR_CHAR);
- if(!filealloc)
+ if(!filealloc) {
+ free(homea);
return -1;
+ }
retcode = parsenetrc(host, loginp, passwordp, login_changed,
password_changed, filealloc);
free(filealloc);
@@ -256,13 +258,16 @@ int Curl_parsenetrc(const char *host,
if(retcode == NETRC_FILE_MISSING) {
/* fallback to the old-style "_netrc" file */
filealloc = curl_maprintf("%s%s_netrc", home, DIR_CHAR);
- if(!filealloc)
+ if(!filealloc) {
+ free(homea);
return -1;
+ }
retcode = parsenetrc(host, loginp, passwordp, login_changed,
password_changed, filealloc);
free(filealloc);
}
#endif
+ free(homea);
}
else
retcode = parsenetrc(host, loginp, passwordp, login_changed,