diff options
Diffstat (limited to 'lib/ftp.c')
-rw-r--r-- | lib/ftp.c | 37 |
1 files changed, 16 insertions, 21 deletions
@@ -3699,7 +3699,7 @@ static CURLcode init_wc_data(struct connectdata *conn) char *path = conn->data->state.path; struct WildcardData *wildcard = &(conn->data->wildcard); CURLcode result = CURLE_OK; - struct ftp_wc *ftpwc = NULL; + struct ftp_wc *ftpwc; last_slash = strrchr(conn->data->state.path, '/'); if(last_slash) { @@ -3734,15 +3734,16 @@ static CURLcode init_wc_data(struct connectdata *conn) /* allocate ftp protocol specific wildcard data */ ftpwc = calloc(1, sizeof(struct ftp_wc)); if(!ftpwc) { - result = CURLE_OUT_OF_MEMORY; - goto fail; + Curl_safefree(wildcard->pattern); + return CURLE_OUT_OF_MEMORY; } /* INITIALIZE parselist structure */ ftpwc->parser = Curl_ftp_parselist_data_alloc(); if(!ftpwc->parser) { - result = CURLE_OUT_OF_MEMORY; - goto fail; + Curl_safefree(wildcard->pattern); + free(ftpwc); + return CURLE_OUT_OF_MEMORY; } wildcard->protdata = ftpwc; /* put it to the WildcardData tmp pointer */ @@ -3755,13 +3756,20 @@ static CURLcode init_wc_data(struct connectdata *conn) /* try to parse ftp url */ result = ftp_parse_url_path(conn); if(result) { - goto fail; + Curl_safefree(wildcard->pattern); + wildcard->dtor(wildcard->protdata); + wildcard->dtor = ZERO_NULL; + wildcard->protdata = NULL; + return result; } wildcard->path = strdup(conn->data->state.path); if(!wildcard->path) { - result = CURLE_OUT_OF_MEMORY; - goto fail; + Curl_safefree(wildcard->pattern); + wildcard->dtor(wildcard->protdata); + wildcard->dtor = ZERO_NULL; + wildcard->protdata = NULL; + return CURLE_OUT_OF_MEMORY; } /* backup old write_function */ @@ -3775,17 +3783,6 @@ static CURLcode init_wc_data(struct connectdata *conn) infof(conn->data, "Wildcard - Parsing started\n"); return CURLE_OK; - - fail: - if(ftpwc) { - Curl_ftp_parselist_data_free(&ftpwc->parser); - free(ftpwc); - } - Curl_safefree(wildcard->pattern); - wildcard->dtor(wildcard->protdata); - wildcard->dtor = ZERO_NULL; - wildcard->protdata = NULL; - return result; } /* This is called recursively */ @@ -3906,8 +3903,6 @@ static CURLcode wc_statemach(struct connectdata *conn) case CURLWC_DONE: case CURLWC_ERROR: case CURLWC_CLEAR: - if(wildcard->dtor) - wildcard->dtor(wildcard->protdata); break; } |