From ec49962140e2c64c87b16f7f5984a34f47d90782 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 3 Sep 2019 13:46:36 +0200 Subject: netrc: free 'home' on error Follow-up to f9c7ba9096ec2 Coverity CID 1453474 --- lib/netrc.c | 19 ++++++++++++------- 1 file 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, -- cgit v1.2.1