diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-12-12 23:43:29 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-12-13 08:16:32 +0100 |
commit | 5ada9004583f9839448c697acf386ebbcbeb4bce (patch) | |
tree | 0974b188cf1ac7f6d51357949242e23f418db2d6 /tests/unit | |
parent | f389953da0f9da754550f6f5540d44d7aaf2ea32 (diff) |
unit1609: fix mem-leak in OOM
Closes #4709
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/unit1609.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/tests/unit/unit1609.c b/tests/unit/unit1609.c index 8223a147c..ce3ddf9d8 100644 --- a/tests/unit/unit1609.c +++ b/tests/unit/unit1609.c @@ -100,6 +100,9 @@ UNITTEST_START { int i; int testnum = sizeof(tests) / sizeof(struct testcase); + struct Curl_multi *multi = NULL; + struct Curl_easy *easy = NULL; + struct curl_slist *list = NULL; /* important: we setup cache outside of the loop and also clean cache after the loop. In contrast,for example, @@ -110,11 +113,9 @@ UNITTEST_START int addressnum = sizeof (tests[i].address) / sizeof (*tests[i].address); struct Curl_addrinfo *addr; struct Curl_dns_entry *dns; - struct curl_slist *list; void *entry_id; bool problem = false; - struct Curl_multi *multi; - struct Curl_easy *easy = curl_easy_init(); + easy = curl_easy_init(); if(!easy) { curl_global_cleanup(); return CURLE_OUT_OF_MEMORY; @@ -122,21 +123,23 @@ UNITTEST_START /* create a multi handle and add the easy handle to it so that the hostcache is setup */ multi = curl_multi_init(); + if(!multi) + goto error; curl_multi_add_handle(multi, easy); list = curl_slist_append(NULL, tests[i].optval); if(!list) - goto unit_test_abort; + goto error; curl_easy_setopt(easy, CURLOPT_RESOLVE, list); - Curl_loadhostpairs(easy); + if(Curl_loadhostpairs(easy)) + goto error; entry_id = (void *)aprintf("%s:%d", tests[i].host, tests[i].port); - if(!entry_id) { - curl_slist_free_all(list); - goto unit_test_abort; - } + if(!entry_id) + goto error; + dns = Curl_hash_pick(easy->dns.hostcache, entry_id, strlen(entry_id) + 1); free(entry_id); entry_id = NULL; @@ -194,14 +197,22 @@ UNITTEST_START } curl_easy_cleanup(easy); + easy = NULL; Curl_hash_destroy(&multi->hostcache); curl_multi_cleanup(multi); + multi = NULL; curl_slist_free_all(list); + list = NULL; if(problem) { unitfail++; continue; } } + goto unit_test_abort; + error: + curl_easy_cleanup(easy); + curl_multi_cleanup(multi); + curl_slist_free_all(list); } UNITTEST_STOP |