diff options
author | Daniel Stenberg <daniel@haxx.se> | 2018-04-24 08:19:54 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2018-04-24 08:19:54 +0200 |
commit | 5c39ccd83f051de3fc803584c1405b4fb5f9f899 (patch) | |
tree | d2678bd637914e34a3eef4c8961ded360ac55c68 /lib/ftp.c | |
parent | a7df35ce2130a99f26c4c8315ce46bf10804280e (diff) | |
download | curl-5c39ccd83f051de3fc803584c1405b4fb5f9f899.tar.gz |
Revert "ftplistparser: keep state between invokes"
This reverts commit abbc8457d85aca74b7cfda1d394b0844932b2934.
Caused fuzzer problems on travis not seen when this was a PR!
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; } |