From 02fc7bb5f6cce2ddbd40504b2828e888d48f2303 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Fri, 31 Oct 2008 14:46:48 +0000 Subject: [PATCH] fix OOM handling --- tests/libtest/lib558.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/tests/libtest/lib558.c b/tests/libtest/lib558.c index 00c0a490a..ceb42b1ee 100644 --- a/tests/libtest/lib558.c +++ b/tests/libtest/lib558.c @@ -77,8 +77,9 @@ static Curl_addrinfo *fake_ai(void) int test(char *URL) { - CURL *easyh; - struct curl_hash *hp; + CURL *easyh = NULL; + struct curl_hash *hp = NULL; + int result = 0; if(!strcmp(URL, "check")) { /* test harness script verifying if this test can run */ @@ -88,7 +89,8 @@ int test(char *URL) easyh = curl_easy_init(); if(!easyh) { fprintf(stdout, "easy handle init failed\n"); - return TEST_ERR_MAJOR_BAD; + result = TEST_ERR_MAJOR_BAD; + goto cleanup; } fprintf(stdout, "easy handle init OK\n"); @@ -96,7 +98,8 @@ int test(char *URL) hp = Curl_mk_dnscache(); if(!hp) { fprintf(stdout, "hash creation failed\n"); - return TEST_ERR_MAJOR_BAD; + result = TEST_ERR_MAJOR_BAD; + goto cleanup; } fprintf(stdout, "hash creation OK\n"); @@ -111,26 +114,36 @@ int test(char *URL) data_key = aprintf("%s:%d", "dummy", 0); if(!data_key) { fprintf(stdout, "data key creation failed\n"); - return TEST_ERR_MAJOR_BAD; + result = TEST_ERR_MAJOR_BAD; + goto cleanup; } key_len = strlen(data_key); data_node = calloc(1, sizeof(struct Curl_dns_entry)); if(!data_node) { fprintf(stdout, "data node creation failed\n"); - return TEST_ERR_MAJOR_BAD; + result = TEST_ERR_MAJOR_BAD; + free(data_key); + goto cleanup; } data_node->addr = fake_ai(); if(!data_node->addr) { fprintf(stdout, "actual data creation failed\n"); - return TEST_ERR_MAJOR_BAD; + result = TEST_ERR_MAJOR_BAD; + free(data_node); + free(data_key); + goto cleanup; } nodep = Curl_hash_add(hp, data_key, key_len+1, (void *)data_node); if(!nodep) { fprintf(stdout, "insertion into hash failed\n"); - return TEST_ERR_MAJOR_BAD; + result = TEST_ERR_MAJOR_BAD; + Curl_freeaddrinfo(data_node->addr); + free(data_node); + free(data_key); + goto cleanup; } free(data_key); @@ -138,6 +151,8 @@ int test(char *URL) #endif /* LIB559 */ /**/ +cleanup: + fprintf(stdout, "destroying hash...\n"); Curl_hash_destroy(hp); fprintf(stdout, "hash destruction OK\n");