Hi,
This patch fix off-by-one error in packet_list_init()
and makes new_packet_list_append() to use stack for row_data_t.
Btw. There's new issue, when I load some capture into wireshark, and don't
click any packet. I got SIGSEGV on closing capture (^W) on quiting (^Q)
(gdb) bt
#0 0x000000000044ea8f in set_menus_for_selected_packet (cf=0x79e3e0) at menus.c:2639
#1 0x000000000044a15b in main_cf_callback (event=<value optimized out>, data=0x79e3e0, user_data=<value optimized out>) at main.c:1277
#2 0x0000000000435145 in cf_callback_invoke (event=0, data=0x79e3e0) at file.c:146
#3 0x0000000000438c7e in cf_close (cf=0x79e3e0) at file.c:385
[cut]
2639 set_menu_sensitivity(packet_list_menu_factory, "/SCTP",
2640 cf->current_frame != NULL ? (cf->edt->pi.ipproto == IP_PROTO_SCTP) : FALSE);
cf->current_frame $1 = (frame_data *) 0x16bcae0,
but cf->edt $2 = (epan_dissect_t *) 0x0
diff --git gtk/new_packet_list.c gtk/new_packet_list.c
index cbf2f6c..fec3d12 100644
--- gtk/new_packet_list.c
+++ gtk/new_packet_list.c
@@ -85,20 +85,18 @@ guint
new_packet_list_append(column_info cinfo, frame_data *fdata)
{
gint i;
- row_data_t *row_data;
+ row_data_t row_data;
- row_data = g_new0(row_data_t, 1);
+ memset(&row_data, 0, sizeof(row_data_t));
for(i = 0; i < cfile.cinfo.num_cols; i++) {
- row_data->col_text[cinfo.col_fmt[i]] =
+ row_data.col_text[cinfo.col_fmt[i]] =
se_strdup(cinfo.col_data[i]);
}
- row_data->fdata = fdata;
+ row_data.fdata = fdata;
- packet_list_append_record(packetlist, row_data);
-
- g_free(row_data);
+ packet_list_append_record(packetlist, &row_data);
return packetlist->num_rows; /* XXX - Check that this is the right # */
}
diff --git gtk/packet_list_store.c gtk/packet_list_store.c
index 7c8670b..92d4f12 100644
--- gtk/packet_list_store.c
+++ gtk/packet_list_store.c
@@ -202,10 +202,9 @@ packet_list_init(PacketList *packet_list)
{
guint i;
- for(i = 0; i <= NUM_COL_FMTS; i++) { /* XXX - Temporary? */
+ for(i = 0; i < NUM_COL_FMTS; i++) { /* XXX - Temporary? */
packet_list->column_types[i] = G_TYPE_STRING;
}
-
packet_list->n_columns = NUM_COL_FMTS;
packet_list->num_rows = 0;