summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGisle Vanem <gvanem@broadpark.no>2005-02-08 12:32:28 +0000
committerGisle Vanem <gvanem@broadpark.no>2005-02-08 12:32:28 +0000
commit82b93e494583f87bee0bef33575f5c3d07253791 (patch)
tree30f6da869ecca74a26c2689f5b5711c6b3d89a98
parente36fb1ecda1782204dbd352f7e2e836c019dd3e3 (diff)
downloadgnurl-82b93e494583f87bee0bef33575f5c3d07253791.tar.gz
gnurl-82b93e494583f87bee0bef33575f5c3d07253791.tar.bz2
gnurl-82b93e494583f87bee0bef33575f5c3d07253791.zip
Don't free too much in freedirs() if realloc() fails.
-rw-r--r--lib/ftp.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index ddbd4968f..b29ae5363 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2754,10 +2754,9 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
ftp->dirdepth = 0;
ftp->diralloc = 5; /* default dir depth to allocate */
- ftp->dirs = (char **)malloc(ftp->diralloc * sizeof(ftp->dirs[0]));
+ ftp->dirs = (char **)calloc(ftp->diralloc, sizeof(ftp->dirs[0]));
if(!ftp->dirs)
return CURLE_OUT_OF_MEMORY;
- ftp->dirs[0] = NULL; /* to start with */
/* parse the URL path into separate path components */
while((slash_pos=strchr(cur_pos, '/'))) {
@@ -2795,6 +2794,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
ftp->diralloc *= 2; /* double the size each time */
bigger = realloc(ftp->dirs, ftp->diralloc * sizeof(ftp->dirs[0]));
if(!bigger) {
+ ftp->dirdepth--;
freedirs(ftp);
return CURLE_OUT_OF_MEMORY;
}