diff options
author | Anders Broman <anders.broman@ericsson.com> | 2006-02-27 09:01:10 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2006-02-27 09:01:10 +0000 |
commit | 0fc74ff3357fd9444963b8d22e730a6198a43a02 (patch) | |
tree | 548d7de9d8881cab0456fbf2529800ea91f45b3b /epan/addr_resolv.c | |
parent | 7d208bc4e0a56e17f1d9eedb08bf9841775a41ea (diff) |
From dider
file.c
time reference menu callback doesn't set cf->filter, it dumps a core if
you have a file big enough in find next/ find prev.
addr_resolv.c
leak memory, break list chain when snooping address.
svn path=/trunk/; revision=17419
Diffstat (limited to 'epan/addr_resolv.c')
-rw-r--r-- | epan/addr_resolv.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/epan/addr_resolv.c b/epan/addr_resolv.c index 8ccb415aa6..e495f7d2fb 100644 --- a/epan/addr_resolv.c +++ b/epan/addr_resolv.c @@ -142,9 +142,9 @@ typedef struct hashipv4 { guint addr; - gchar name[MAXNAMELEN]; gboolean is_dummy_entry; /* name is IPv4 address in dot format */ struct hashipv4 *next; + gchar name[MAXNAMELEN]; } hashipv4_t; /* hash table used for IPv6 lookup */ @@ -1063,6 +1063,7 @@ static hashether_t *add_eth_name(const guint8 *addr, const gchar *name) { int hash_idx; hashether_t *tp; + int new_one = TRUE; hash_idx = HASH_ETH_ADDRESS(addr); @@ -1078,6 +1079,7 @@ static hashether_t *add_eth_name(const guint8 *addr, const gchar *name) return tp; } else { /* replace this dummy (manuf) entry with a real name */ + new_one = FALSE; break; } } @@ -1090,10 +1092,12 @@ static hashether_t *add_eth_name(const guint8 *addr, const gchar *name) } } - memcpy(tp->addr, addr, sizeof(tp->addr)); strncpy(tp->name, name, MAXNAMELEN); tp->name[MAXNAMELEN-1] = '\0'; - tp->next = NULL; + if (new_one) { + memcpy(tp->addr, addr, sizeof(tp->addr)); + tp->next = NULL; + } tp->is_dummy_entry = FALSE; return tp; @@ -1795,6 +1799,7 @@ extern void add_ipv4_name(guint addr, const gchar *name) { int hash_idx; hashipv4_t *tp; + int new_one = TRUE; hash_idx = HASH_IPV4_ADDRESS(addr); @@ -1810,6 +1815,7 @@ extern void add_ipv4_name(guint addr, const gchar *name) return; } else { /* replace this dummy entry with the new one */ + new_one = FALSE; break; } } @@ -1824,8 +1830,10 @@ extern void add_ipv4_name(guint addr, const gchar *name) strncpy(tp->name, name, MAXNAMELEN); tp->name[MAXNAMELEN-1] = '\0'; - tp->addr = addr; - tp->next = NULL; + if (new_one) { + tp->addr = addr; + tp->next = NULL; + } tp->is_dummy_entry = FALSE; } /* add_ipv4_name */ @@ -1834,6 +1842,7 @@ extern void add_ipv6_name(struct e_in6_addr *addrp, const gchar *name) { int hash_idx; hashipv6_t *tp; + int new_one = TRUE; hash_idx = HASH_IPV6_ADDRESS(*addrp); @@ -1849,6 +1858,7 @@ extern void add_ipv6_name(struct e_in6_addr *addrp, const gchar *name) return; } else { /* replace this dummy entry with the new one */ + new_one = FALSE; break; } } @@ -1863,8 +1873,10 @@ extern void add_ipv6_name(struct e_in6_addr *addrp, const gchar *name) strncpy(tp->name, name, MAXNAMELEN); tp->name[MAXNAMELEN-1] = '\0'; - tp->addr = *addrp; - tp->next = NULL; + if (new_one) { + tp->addr = *addrp; + tp->next = NULL; + } tp->is_dummy_entry = FALSE; } /* add_ipv6_name */ |