gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnurl] 110/178: Revert "ftplistparser: keep state between


From: gnunet
Subject: [GNUnet-SVN] [gnurl] 110/178: Revert "ftplistparser: keep state between invokes"
Date: Wed, 23 May 2018 12:25:45 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnurl.

commit 5c39ccd83f051de3fc803584c1405b4fb5f9f899
Author: Daniel Stenberg <address@hidden>
AuthorDate: Tue Apr 24 08:19:54 2018 +0200

    Revert "ftplistparser: keep state between invokes"
    
    This reverts commit abbc8457d85aca74b7cfda1d394b0844932b2934.
    
    Caused fuzzer problems on travis not seen when this was a PR!
---
 lib/fileinfo.c      |  7 +++++--
 lib/fileinfo.h      |  5 +++--
 lib/ftp.c           | 37 ++++++++++++++++---------------------
 lib/ftplistparser.c | 18 +++++++-----------
 lib/wildcard.c      |  8 +-------
 5 files changed, 32 insertions(+), 43 deletions(-)

diff --git a/lib/fileinfo.c b/lib/fileinfo.c
index 4e72e1eba..387298847 100644
--- a/lib/fileinfo.c
+++ b/lib/fileinfo.c
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2010 - 2018, Daniel Stenberg, <address@hidden>, et al.
+ * Copyright (C) 2010 - 2017, Daniel Stenberg, <address@hidden>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -33,11 +33,14 @@ struct fileinfo *Curl_fileinfo_alloc(void)
   return calloc(1, sizeof(struct fileinfo));
 }
 
-void Curl_fileinfo_cleanup(struct fileinfo *finfo)
+void Curl_fileinfo_dtor(void *user, void *element)
 {
+  struct fileinfo *finfo = element;
+  (void) user;
   if(!finfo)
     return;
 
   Curl_safefree(finfo->info.b_data);
+
   free(finfo);
 }
diff --git a/lib/fileinfo.h b/lib/fileinfo.h
index f4d8f3b90..c5d0ee5b6 100644
--- a/lib/fileinfo.h
+++ b/lib/fileinfo.h
@@ -7,7 +7,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2010 - 2018, Daniel Stenberg, <address@hidden>, et al.
+ * Copyright (C) 2010, 2017, Daniel Stenberg, <address@hidden>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -31,6 +31,7 @@ struct fileinfo {
 };
 
 struct fileinfo *Curl_fileinfo_alloc(void);
-void Curl_fileinfo_cleanup(struct fileinfo *finfo);
+
+void Curl_fileinfo_dtor(void *, void *);
 
 #endif /* HEADER_CURL_FILEINFO_H */
diff --git a/lib/ftp.c b/lib/ftp.c
index a7830b9ce..e53e1b3b3 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -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;
   }
 
diff --git a/lib/ftplistparser.c b/lib/ftplistparser.c
index 249fe09c8..813e954c7 100644
--- a/lib/ftplistparser.c
+++ b/lib/ftplistparser.c
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
+ * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -185,13 +185,10 @@ struct ftp_parselist_data 
*Curl_ftp_parselist_data_alloc(void)
 }
 
 
-void Curl_ftp_parselist_data_free(struct ftp_parselist_data **parserp)
+void Curl_ftp_parselist_data_free(struct ftp_parselist_data **pl_data)
 {
-  struct ftp_parselist_data *parser = *parserp;
-  if(parser)
-    Curl_fileinfo_cleanup(parser->file_data);
-  free(parser);
-  *parserp = NULL;
+  free(*pl_data);
+  *pl_data = NULL;
 }
 
 
@@ -316,7 +313,7 @@ static CURLcode ftp_pl_insert_finfo(struct connectdata 
*conn,
     Curl_llist_insert_next(llist, llist->tail, finfo, &infop->list);
   }
   else {
-    Curl_fileinfo_cleanup(infop);
+    Curl_fileinfo_dtor(NULL, finfo);
   }
 
   ftpwc->parser->file_data = NULL;
@@ -384,7 +381,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t 
nmemb,
         finfo->b_data = tmp;
       }
       else {
-        Curl_fileinfo_cleanup(parser->file_data);
+        Curl_fileinfo_dtor(NULL, parser->file_data);
         parser->file_data = NULL;
         parser->error = CURLE_OUT_OF_MEMORY;
         goto fail;
@@ -1006,13 +1003,12 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, 
size_t nmemb,
 
     i++;
   }
-  return retsize;
 
 fail:
 
   /* Clean up any allocated memory. */
   if(parser->file_data) {
-    Curl_fileinfo_cleanup(parser->file_data);
+    Curl_fileinfo_dtor(NULL, parser->file_data);
     parser->file_data = NULL;
   }
 
diff --git a/lib/wildcard.c b/lib/wildcard.c
index 8ba0989b4..cb88ab72f 100644
--- a/lib/wildcard.c
+++ b/lib/wildcard.c
@@ -30,15 +30,9 @@
 #include "curl_memory.h"
 #include "memdebug.h"
 
-static void fileinfo_dtor(void *user, void *element)
-{
-  (void)user;
-  Curl_fileinfo_cleanup(element);
-}
-
 CURLcode Curl_wildcard_init(struct WildcardData *wc)
 {
-  Curl_llist_init(&wc->filelist, fileinfo_dtor);
+  Curl_llist_init(&wc->filelist, Curl_fileinfo_dtor);
   wc->state = CURLWC_INIT;
 
   return CURLE_OK;

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]