diff options
author | Gisle Vanem <gvanem@broadpark.no> | 2005-02-08 12:32:28 +0000 |
---|---|---|
committer | Gisle Vanem <gvanem@broadpark.no> | 2005-02-08 12:32:28 +0000 |
commit | 82b93e494583f87bee0bef33575f5c3d07253791 (patch) | |
tree | 30f6da869ecca74a26c2689f5b5711c6b3d89a98 | |
parent | e36fb1ecda1782204dbd352f7e2e836c019dd3e3 (diff) |
Don't free too much in freedirs() if realloc() fails.
-rw-r--r-- | lib/ftp.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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; } |