bad directory name extractor fixed, now always free the file and directory
very early, as that could leak memory before
This commit is contained in:
parent
b734bc37eb
commit
29d21bea18
19
lib/ftp.c
19
lib/ftp.c
@ -129,7 +129,7 @@ struct curl_slist *curl_slist_append(struct curl_slist *list, char *data)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "Cannot allocate memory for QUOTE list.\n");
|
fprintf(stderr, "Cannot allocate memory for QUOTE list.\n");
|
||||||
exit(-1);
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list) {
|
if (list) {
|
||||||
@ -584,11 +584,6 @@ CURLcode ftp_done(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ftp->file)
|
|
||||||
free(ftp->file);
|
|
||||||
if(ftp->dir)
|
|
||||||
free(ftp->dir);
|
|
||||||
|
|
||||||
free(ftp);
|
free(ftp);
|
||||||
data->proto.ftp=NULL; /* it is gone */
|
data->proto.ftp=NULL; /* it is gone */
|
||||||
|
|
||||||
@ -1406,13 +1401,15 @@ CURLcode ftp(struct connectdata *conn)
|
|||||||
it */
|
it */
|
||||||
ftp->file = strrchr(conn->ppath, '/');
|
ftp->file = strrchr(conn->ppath, '/');
|
||||||
if(ftp->file) {
|
if(ftp->file) {
|
||||||
|
if(ftp->file != conn->ppath)
|
||||||
|
dirlength=ftp->file-conn->ppath; /* don't count the traling slash */
|
||||||
|
|
||||||
ftp->file++; /* point to the first letter in the file name part or
|
ftp->file++; /* point to the first letter in the file name part or
|
||||||
remain NULL */
|
remain NULL */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ftp->file = conn->ppath; /* there's only a file part */
|
ftp->file = conn->ppath; /* there's only a file part */
|
||||||
}
|
}
|
||||||
dirlength=ftp->file-conn->ppath;
|
|
||||||
|
|
||||||
if(*ftp->file) {
|
if(*ftp->file) {
|
||||||
ftp->file = curl_unescape(ftp->file, 0);
|
ftp->file = curl_unescape(ftp->file, 0);
|
||||||
@ -1440,6 +1437,14 @@ CURLcode ftp(struct connectdata *conn)
|
|||||||
|
|
||||||
retcode = _ftp(conn);
|
retcode = _ftp(conn);
|
||||||
|
|
||||||
|
/* clean up here, success or error doesn't matter */
|
||||||
|
if(ftp->file)
|
||||||
|
free(ftp->file);
|
||||||
|
if(ftp->dir)
|
||||||
|
free(ftp->dir);
|
||||||
|
|
||||||
|
ftp->file = ftp->dir = NULL; /* zero */
|
||||||
|
|
||||||
return retcode;
|
return retcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user