aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2006-02-27 09:01:10 +0000
committerAnders Broman <anders.broman@ericsson.com>2006-02-27 09:01:10 +0000
commit0fc74ff3357fd9444963b8d22e730a6198a43a02 (patch)
tree548d7de9d8881cab0456fbf2529800ea91f45b3b
parent7d208bc4e0a56e17f1d9eedb08bf9841775a41ea (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
-rw-r--r--epan/addr_resolv.c26
-rw-r--r--file.c4
2 files changed, 22 insertions, 8 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 */
diff --git a/file.c b/file.c
index 2b3a020b7d..2f6d741bba 100644
--- a/file.c
+++ b/file.c
@@ -2742,6 +2742,7 @@ find_packet(capture_file *cf,
gchar status_str[100];
int progbar_nextstep;
int progbar_quantum;
+ char *title;
start_fd = cf->current_frame;
if (start_fd != NULL) {
@@ -2763,6 +2764,7 @@ find_packet(capture_file *cf,
g_get_current_time(&start_time);
fdata = start_fd;
+ title = cf->sfilter?cf->sfilter:"";
for (;;) {
/* Create the progress bar if necessary.
We check on every iteration of the loop, so that it takes no
@@ -2770,7 +2772,7 @@ find_packet(capture_file *cf,
large file, we might take considerably longer than that standard
time in order to get to the next progress bar step). */
if (progbar == NULL)
- progbar = delayed_create_progress_dlg("Searching", cf->sfilter,
+ progbar = delayed_create_progress_dlg("Searching", title,
FALSE, &stop_flag, &start_time, progbar_val);
/* Update the progress bar, but do it only N_PROGBAR_UPDATES times;