]> granicus.if.org Git - curl/commitdiff
curl: fix memory leaked by parse_metalink()
authorKamil Dudka <kdudka@redhat.com>
Wed, 11 Sep 2019 14:32:11 +0000 (16:32 +0200)
committerKamil Dudka <kdudka@redhat.com>
Fri, 13 Sep 2019 08:09:48 +0000 (10:09 +0200)
This commit fixes a regression introduced by curl-7_65_3-5-gb88940850.
Detected by tests 2005, 2008, 2009, 2010, 2011, and 2012 with valgrind
and libmetalink enabled.

Closes #4326

src/tool_metalink.c
src/tool_metalink.h
src/tool_operate.c

index 0740407f9d0522a5f97d1dc1461e1c39276847b3..cd5a7d6501b1412e0c9a90b0b1bf0ed0fc02b917 100644 (file)
@@ -965,7 +965,7 @@ static void delete_metalink_resource(metalink_resource *res)
   Curl_safefree(res);
 }
 
-static void delete_metalinkfile(metalinkfile *mlfile)
+void delete_metalinkfile(metalinkfile *mlfile)
 {
   metalink_resource *res;
   if(mlfile == NULL) {
index 1e367033c8d80923da18d95b7af5a5292be1c4fa..f5ec306f78b57b88271a7efe9549b014701286c5 100644 (file)
@@ -105,6 +105,8 @@ extern const digest_params SHA256_DIGEST_PARAMS[1];
  * Counts the resource in the metalinkfile.
  */
 int count_next_metalink_resource(metalinkfile *mlfile);
+
+void delete_metalinkfile(metalinkfile *mlfile);
 void clean_metalink(struct OperationConfig *config);
 
 /*
@@ -158,6 +160,7 @@ void metalink_cleanup(void);
 #else /* USE_METALINK */
 
 #define count_next_metalink_resource(x)  0
+#define delete_metalinkfile(x)  (void)x
 #define clean_metalink(x)  (void)x
 
 /* metalink_cleanup() takes no arguments */
index d2ad9642db4a119001ac9ba64c2ab3c05f445287..09dfc0c84cd88597e0eb47e152bc8f0049cc524f 100644 (file)
@@ -2073,6 +2073,10 @@ static CURLcode serial_transfers(struct GlobalConfig *global,
     result = post_transfer(global, share, per, result, &retry);
     if(retry)
       continue;
+
+    /* Release metalink related resources here */
+    delete_metalinkfile(per->mlfile);
+
     per = del_transfer(per);
 
     /* Bail out upon critical errors or --fail-early */