unit1307: proper cleanup on OOM to fix torture tests

This commit is contained in:
Dan Fandrich 2018-03-02 20:51:59 +01:00
parent 24753bcd48
commit c87c71b3fe

View File

@ -30,6 +30,12 @@
static struct Curl_easy *easy; static struct Curl_easy *easy;
struct curl_hash *hostcache; struct curl_hash *hostcache;
static void unit_stop(void)
{
curl_easy_cleanup(easy);
curl_global_cleanup();
}
static CURLcode unit_setup(void) static CURLcode unit_setup(void)
{ {
int res = CURLE_OK; int res = CURLE_OK;
@ -37,20 +43,18 @@ static CURLcode unit_setup(void)
global_init(CURL_GLOBAL_ALL); global_init(CURL_GLOBAL_ALL);
easy = curl_easy_init(); easy = curl_easy_init();
if(!easy) if(!easy) {
curl_global_cleanup();
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
hostcache = Curl_global_host_cache_init();
if(!hostcache)
return CURLE_OUT_OF_MEMORY;
return res;
} }
static void unit_stop(void) hostcache = Curl_global_host_cache_init();
{ if(!hostcache) {
curl_easy_cleanup(easy); unit_stop();
curl_global_cleanup(); return CURLE_OUT_OF_MEMORY;
}
return res;
} }
struct testcase { struct testcase {
@ -128,11 +132,17 @@ UNITTEST_START
easy->dns.hostcachetype = HCACHE_GLOBAL; easy->dns.hostcachetype = HCACHE_GLOBAL;
list = curl_slist_append(NULL, tests[i].optval); list = curl_slist_append(NULL, tests[i].optval);
if(!list)
goto unit_test_abort;
curl_easy_setopt(easy, CURLOPT_RESOLVE, list); curl_easy_setopt(easy, CURLOPT_RESOLVE, list);
Curl_loadhostpairs(easy); Curl_loadhostpairs(easy);
entry_id = (void *)aprintf("%s:%d", tests[i].host, tests[i].port); entry_id = (void *)aprintf("%s:%d", tests[i].host, tests[i].port);
if(!entry_id) {
curl_slist_free_all(list);
goto unit_test_abort;
}
dns = Curl_hash_pick(easy->dns.hostcache, entry_id, strlen(entry_id) + 1); dns = Curl_hash_pick(easy->dns.hostcache, entry_id, strlen(entry_id) + 1);
free(entry_id); free(entry_id);
entry_id = NULL; entry_id = NULL;