summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2008-10-31 14:46:48 +0000
committerYang Tse <yangsita@gmail.com>2008-10-31 14:46:48 +0000
commit02fc7bb5f6cce2ddbd40504b2828e888d48f2303 (patch)
treed3e60fe902c74b9ece2374d8456dcae2b21e7f80
parent9e1294e8661c64ab93842f967f4470bb8c648658 (diff)
downloadgnurl-02fc7bb5f6cce2ddbd40504b2828e888d48f2303.tar.gz
gnurl-02fc7bb5f6cce2ddbd40504b2828e888d48f2303.tar.bz2
gnurl-02fc7bb5f6cce2ddbd40504b2828e888d48f2303.zip
fix OOM handling
-rw-r--r--tests/libtest/lib558.c31
1 files 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");