Loading lib/ftp.c +28 −23 Original line number Diff line number Diff line Loading @@ -105,6 +105,15 @@ static CURLcode ftp_cwd(struct connectdata *conn, char *path); /* easy-to-use macro: */ #define FTPSENDF(x,y,z) if((result = Curl_ftpsendf(x,y,z))) return result static void freedirs(struct FTP *ftp) { int i; for (i=0; ftp->dirs[i]; i++){ free(ftp->dirs[i]); ftp->dirs[i]=NULL; } } /*********************************************************************** * * AllowServerConnect() Loading Loading @@ -598,6 +607,14 @@ CURLcode Curl_ftp_done(struct connectdata *conn) int ftpcode; CURLcode result=CURLE_OK; /* free the dir tree parts */ freedirs(ftp); if(ftp->file) { free(ftp->file); ftp->file = NULL; } if(data->set.upload) { if((-1 != data->set.infilesize) && (data->set.infilesize != *ftp->bytecountp) && Loading Loading @@ -2161,7 +2178,8 @@ CURLcode Curl_ftp(struct connectdata *conn) if (!ftp->dirs[path_part]) { /* run out of memory ... */ failf(data, "no memory"); retcode = CURLE_OUT_OF_MEMORY; freedirs(ftp); return CURLE_OUT_OF_MEMORY; } } else { Loading @@ -2175,16 +2193,9 @@ CURLcode Curl_ftp(struct connectdata *conn) /* too deep, we need the last entry to be kept NULL at all times to signal end of list */ failf(data, "too deep dir hierarchy"); retcode = CURLE_URL_MALFORMAT; } } if (retcode) { int i; for (i=0;i<path_part;i++) { /* free previous parts */ free(ftp->dirs[i]); ftp->dirs[i]=NULL; freedirs(ftp); return CURLE_URL_MALFORMAT; } return retcode; /* failure */ } } Loading @@ -2193,11 +2204,7 @@ CURLcode Curl_ftp(struct connectdata *conn) if(*ftp->file) { ftp->file = curl_unescape(ftp->file, 0); if(NULL == ftp->file) { int i; for (i=0;i<path_part;i++){ free(ftp->dirs[i]); ftp->dirs[i]=NULL; } freedirs(ftp); failf(data, "no memory"); return CURLE_OUT_OF_MEMORY; } Loading Loading @@ -2288,23 +2295,21 @@ CURLcode Curl_ftpsendf(struct connectdata *conn, CURLcode Curl_ftp_disconnect(struct connectdata *conn) { struct FTP *ftp= conn->proto.ftp; int i; /* The FTP session may or may not have been allocated/setup at this point! */ if(ftp) { if(ftp->entrypath) free(ftp->entrypath); if(ftp->cache) if(ftp->cache) { free(ftp->cache); if(ftp->file) free(ftp->file); for (i=0;ftp->dirs[i];i++){ free(ftp->dirs[i]); ftp->dirs[i]=NULL; ftp->cache = NULL; } if(ftp->file) { free(ftp->file); ftp->file = NULL; /* zero */ } freedirs(ftp); } return CURLE_OK; } Loading Loading
lib/ftp.c +28 −23 Original line number Diff line number Diff line Loading @@ -105,6 +105,15 @@ static CURLcode ftp_cwd(struct connectdata *conn, char *path); /* easy-to-use macro: */ #define FTPSENDF(x,y,z) if((result = Curl_ftpsendf(x,y,z))) return result static void freedirs(struct FTP *ftp) { int i; for (i=0; ftp->dirs[i]; i++){ free(ftp->dirs[i]); ftp->dirs[i]=NULL; } } /*********************************************************************** * * AllowServerConnect() Loading Loading @@ -598,6 +607,14 @@ CURLcode Curl_ftp_done(struct connectdata *conn) int ftpcode; CURLcode result=CURLE_OK; /* free the dir tree parts */ freedirs(ftp); if(ftp->file) { free(ftp->file); ftp->file = NULL; } if(data->set.upload) { if((-1 != data->set.infilesize) && (data->set.infilesize != *ftp->bytecountp) && Loading Loading @@ -2161,7 +2178,8 @@ CURLcode Curl_ftp(struct connectdata *conn) if (!ftp->dirs[path_part]) { /* run out of memory ... */ failf(data, "no memory"); retcode = CURLE_OUT_OF_MEMORY; freedirs(ftp); return CURLE_OUT_OF_MEMORY; } } else { Loading @@ -2175,16 +2193,9 @@ CURLcode Curl_ftp(struct connectdata *conn) /* too deep, we need the last entry to be kept NULL at all times to signal end of list */ failf(data, "too deep dir hierarchy"); retcode = CURLE_URL_MALFORMAT; } } if (retcode) { int i; for (i=0;i<path_part;i++) { /* free previous parts */ free(ftp->dirs[i]); ftp->dirs[i]=NULL; freedirs(ftp); return CURLE_URL_MALFORMAT; } return retcode; /* failure */ } } Loading @@ -2193,11 +2204,7 @@ CURLcode Curl_ftp(struct connectdata *conn) if(*ftp->file) { ftp->file = curl_unescape(ftp->file, 0); if(NULL == ftp->file) { int i; for (i=0;i<path_part;i++){ free(ftp->dirs[i]); ftp->dirs[i]=NULL; } freedirs(ftp); failf(data, "no memory"); return CURLE_OUT_OF_MEMORY; } Loading Loading @@ -2288,23 +2295,21 @@ CURLcode Curl_ftpsendf(struct connectdata *conn, CURLcode Curl_ftp_disconnect(struct connectdata *conn) { struct FTP *ftp= conn->proto.ftp; int i; /* The FTP session may or may not have been allocated/setup at this point! */ if(ftp) { if(ftp->entrypath) free(ftp->entrypath); if(ftp->cache) if(ftp->cache) { free(ftp->cache); if(ftp->file) free(ftp->file); for (i=0;ftp->dirs[i];i++){ free(ftp->dirs[i]); ftp->dirs[i]=NULL; ftp->cache = NULL; } if(ftp->file) { free(ftp->file); ftp->file = NULL; /* zero */ } freedirs(ftp); } return CURLE_OK; } Loading