[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r12829: our unit tests leak memory like a sieve. fix two actual memo (tor/trunk/src/or)
Author: arma
Date: 2007-12-16 03:20:10 -0500 (Sun, 16 Dec 2007)
New Revision: 12829
Modified:
tor/trunk/src/or/networkstatus.c
tor/trunk/src/or/routerparse.c
tor/trunk/src/or/test.c
Log:
our unit tests leak memory like a sieve.
fix two actual memory leaks found while cleaning up a bit.
Modified: tor/trunk/src/or/networkstatus.c
===================================================================
--- tor/trunk/src/or/networkstatus.c 2007-12-15 22:04:23 UTC (rev 12828)
+++ tor/trunk/src/or/networkstatus.c 2007-12-16 08:20:10 UTC (rev 12829)
@@ -246,6 +246,10 @@
SMARTLIST_FOREACH(ns->known_flags, char *, c, tor_free(c));
smartlist_free(ns->known_flags);
}
+ if (ns->supported_methods) {
+ SMARTLIST_FOREACH(ns->supported_methods, char *, c, tor_free(c));
+ smartlist_free(ns->supported_methods);
+ }
if (ns->voters) {
SMARTLIST_FOREACH(ns->voters, networkstatus_voter_info_t *, voter,
{
Modified: tor/trunk/src/or/routerparse.c
===================================================================
--- tor/trunk/src/or/routerparse.c 2007-12-15 22:04:23 UTC (rev 12828)
+++ tor/trunk/src/or/routerparse.c 2007-12-16 08:20:10 UTC (rev 12829)
@@ -2407,6 +2407,7 @@
sigs = NULL;
done:
SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_free(t));
+ smartlist_free(tokens);
return sigs;
}
Modified: tor/trunk/src/or/test.c
===================================================================
--- tor/trunk/src/or/test.c 2007-12-15 22:04:23 UTC (rev 12828)
+++ tor/trunk/src/or/test.c 2007-12-16 08:20:10 UTC (rev 12829)
@@ -652,6 +652,7 @@
}
crypto_digest(buf2+9, buf3, 65536);
test_memeq(buf, buf2, 29);
+ tor_free(buf3);
}
static int
@@ -987,7 +988,7 @@
tor_free(cp);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
+ smartlist_free(sl);
}
/* now make sure time works. */
@@ -1545,6 +1546,7 @@
test_streq(cp, "will");
smartlist_add(sl, cp);
smartlist_remove(sl, cp);
+ tor_free(cp);
cp = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp, "Some,say,the,Earth,fire,end,in,ice,and,some,in");
tor_free(cp);
@@ -2122,10 +2124,10 @@
char fingerprint[FINGERPRINT_LEN+1];
char *pk1_str = NULL, *pk2_str = NULL, *pk3_str = NULL, *cp;
size_t pk1_str_len, pk2_str_len, pk3_str_len;
- routerinfo_t r1, r2;
+ routerinfo_t *r1, *r2;
crypto_pk_env_t *pk1 = NULL, *pk2 = NULL, *pk3 = NULL;
routerinfo_t *rp1 = NULL, *rp2 = NULL;
- addr_policy_t ex1, ex2;
+ addr_policy_t *ex1, *ex2;
routerlist_t *dir1 = NULL, *dir2 = NULL;
tor_version_t ver1;
@@ -2175,43 +2177,45 @@
test_assert(!is_legal_nickname_or_hexdigest("abcdefghijklmnopqrst"));
get_platform_str(platform, sizeof(platform));
- memset(&r1,0,sizeof(r1));
- memset(&r2,0,sizeof(r2));
- r1.address = tor_strdup("18.244.0.1");
- r1.addr = 0xc0a80001u; /* 192.168.0.1 */
- r1.cache_info.published_on = 0;
- r1.or_port = 9000;
- r1.dir_port = 9003;
- r1.onion_pkey = pk1;
- r1.identity_pkey = pk2;
- r1.bandwidthrate = 1000;
- r1.bandwidthburst = 5000;
- r1.bandwidthcapacity = 10000;
- r1.exit_policy = NULL;
- r1.nickname = tor_strdup("Magri");
- r1.platform = tor_strdup(platform);
+ r1 = tor_malloc_zero(sizeof(routerinfo_t));
+ r1->address = tor_strdup("18.244.0.1");
+ r1->addr = 0xc0a80001u; /* 192.168.0.1 */
+ r1->cache_info.published_on = 0;
+ r1->or_port = 9000;
+ r1->dir_port = 9003;
+ r1->onion_pkey = crypto_pk_dup_key(pk1);
+ r1->identity_pkey = crypto_pk_dup_key(pk2);
+ r1->bandwidthrate = 1000;
+ r1->bandwidthburst = 5000;
+ r1->bandwidthcapacity = 10000;
+ r1->exit_policy = NULL;
+ r1->nickname = tor_strdup("Magri");
+ r1->platform = tor_strdup(platform);
- ex1.policy_type = ADDR_POLICY_ACCEPT;
- ex1.addr = 0;
- ex1.maskbits = 0;
- ex1.prt_min = ex1.prt_max = 80;
- ex1.next = &ex2;
- ex2.policy_type = ADDR_POLICY_REJECT;
- ex2.addr = 18 << 24;
- ex2.maskbits = 8;
- ex2.prt_min = ex2.prt_max = 24;
- ex2.next = NULL;
- r2.address = tor_strdup("1.1.1.1");
- r2.addr = 0x0a030201u; /* 10.3.2.1 */
- r2.platform = tor_strdup(platform);
- r2.cache_info.published_on = 5;
- r2.or_port = 9005;
- r2.dir_port = 0;
- r2.onion_pkey = pk2;
- r2.identity_pkey = pk1;
- r2.bandwidthrate = r2.bandwidthburst = r2.bandwidthcapacity = 3000;
- r2.exit_policy = &ex1;
- r2.nickname = tor_strdup("Fred");
+ ex1 = tor_malloc_zero(sizeof(addr_policy_t));;
+ ex2 = tor_malloc_zero(sizeof(addr_policy_t));;
+ ex1->policy_type = ADDR_POLICY_ACCEPT;
+ ex1->addr = 0;
+ ex1->maskbits = 0;
+ ex1->prt_min = ex1->prt_max = 80;
+ ex1->next = ex2;
+ ex2->policy_type = ADDR_POLICY_REJECT;
+ ex2->addr = 18 << 24;
+ ex2->maskbits = 8;
+ ex2->prt_min = ex2->prt_max = 24;
+ ex2->next = NULL;
+ r2 = tor_malloc_zero(sizeof(routerinfo_t));
+ r2->address = tor_strdup("1.1.1.1");
+ r2->addr = 0x0a030201u; /* 10.3.2.1 */
+ r2->platform = tor_strdup(platform);
+ r2->cache_info.published_on = 5;
+ r2->or_port = 9005;
+ r2->dir_port = 0;
+ r2->onion_pkey = crypto_pk_dup_key(pk2);
+ r2->identity_pkey = crypto_pk_dup_key(pk1);
+ r2->bandwidthrate = r2->bandwidthburst = r2->bandwidthcapacity = 3000;
+ r2->exit_policy = ex1;
+ r2->nickname = tor_strdup("Fred");
test_assert(!crypto_pk_write_public_key_to_string(pk1, &pk1_str,
&pk1_str_len));
@@ -2221,7 +2225,7 @@
&pk3_str_len));
memset(buf, 0, 2048);
- test_assert(router_dump_router_to_string(buf, 2048, &r1, pk2)>0);
+ test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
strlcpy(buf2, "router Magri 18.244.0.1 9000 0 9003\n"
"platform Tor "VERSION" on ", sizeof(buf2));
@@ -2248,16 +2252,16 @@
test_streq(buf, buf2);
- test_assert(router_dump_router_to_string(buf, 2048, &r1, pk2)>0);
+ test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
cp = buf;
rp1 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
test_assert(rp1);
- test_streq(rp1->address, r1.address);
- test_eq(rp1->or_port, r1.or_port);
- //test_eq(rp1->dir_port, r1.dir_port);
- test_eq(rp1->bandwidthrate, r1.bandwidthrate);
- test_eq(rp1->bandwidthburst, r1.bandwidthburst);
- test_eq(rp1->bandwidthcapacity, r1.bandwidthcapacity);
+ test_streq(rp1->address, r1->address);
+ test_eq(rp1->or_port, r1->or_port);
+ //test_eq(rp1->dir_port, r1->dir_port);
+ test_eq(rp1->bandwidthrate, r1->bandwidthrate);
+ test_eq(rp1->bandwidthburst, r1->bandwidthburst);
+ test_eq(rp1->bandwidthcapacity, r1->bandwidthcapacity);
test_assert(crypto_pk_cmp_keys(rp1->onion_pkey, pk1) == 0);
test_assert(crypto_pk_cmp_keys(rp1->identity_pkey, pk2) == 0);
test_assert(rp1->exit_policy == NULL);
@@ -2305,11 +2309,11 @@
const char *m;
/* XXXX NM re-enable. */
/* Make sure routers aren't too far in the past any more. */
- r1.cache_info.published_on = time(NULL);
- r2.cache_info.published_on = time(NULL)-3*60*60;
- test_assert(router_dump_router_to_string(buf, 2048, &r1, pk2)>0);
+ r1->cache_info.published_on = time(NULL);
+ r2->cache_info.published_on = time(NULL)-3*60*60;
+ test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
test_eq(dirserv_add_descriptor(buf,&m), 2);
- test_assert(router_dump_router_to_string(buf, 2048, &r2, pk1)>0);
+ test_assert(router_dump_router_to_string(buf, 2048, r2, pk1)>0);
test_eq(dirserv_add_descriptor(buf,&m), 2);
get_options()->Nickname = tor_strdup("DirServer");
test_assert(!dirserv_dump_directory_to_string(&cp,pk3, 0));
@@ -2323,12 +2327,16 @@
tor_free(pk1_str);
tor_free(pk2_str);
+ tor_free(pk3_str);
if (pk1) crypto_free_pk_env(pk1);
if (pk2) crypto_free_pk_env(pk2);
+ if (pk3) crypto_free_pk_env(pk3);
if (rp1) routerinfo_free(rp1);
if (rp2) routerinfo_free(rp2);
tor_free(dir1); /* XXXX And more !*/
tor_free(dir2); /* And more !*/
+ routerinfo_free(r1);
+ routerinfo_free(r2);
/* Try out version parsing functionality */
test_eq(0, tor_version_parse("0.3.4pre2-cvs", &ver1));
@@ -3218,6 +3226,7 @@
cipher = crypto_create_init_cipher(key1, 0);
decrypted_size = crypto_cipher_decrypt_with_iv(cipher, decrypted1, 16,
encrypted1, encrypted_size);
+ crypto_free_cipher_env(cipher);
test_eq(decrypted_size, 16);
test_memeq(plain_16, decrypted1, 16);
/* Special length case: 17. */
@@ -3353,7 +3362,7 @@
test_eq(gen_info->port, par_info->port);
}
tor_free(intro_points_encrypted);
- for (i = 0; i < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; i++)
+ for (i = 0; i < smartlist_len(descs); i++)
rend_encoded_v2_service_descriptor_free(smartlist_get(descs, i));
smartlist_free(descs);
rend_service_descriptor_free(parsed);