forked from osmocom/wireshark
Remove epan member from PacketWinData and just use cfile.epan when redissecting a packet window.
A pointer to cfile.epan was saved by the window when it's created, but any redissection will remove the epan_session used by cfile.epan underneath the window, so let's just use cfile.epan directly. Bug: 11043 Change-Id: Ie6b85708025f8ab7d5e5dc48ad99fee0931af472 Reviewed-on: https://code.wireshark.org/review/7915 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
parent
8327921a32
commit
8699bc2858
|
@ -73,7 +73,6 @@
|
|||
|
||||
/* Data structure holding information about a packet-detail window. */
|
||||
struct PacketWinData {
|
||||
epan_t *epan;
|
||||
frame_data *frame; /* The frame being displayed */
|
||||
struct wtap_pkthdr phdr; /* Packet header */
|
||||
guint8 *pd; /* Packet data */
|
||||
|
@ -189,7 +188,7 @@ redissect_packet_window(gpointer object, gpointer user_data _U_)
|
|||
/* XXX, can be optimized? */
|
||||
proto_tree_draw(NULL, DataPtr->tree_view);
|
||||
epan_dissect_cleanup(&(DataPtr->edt));
|
||||
epan_dissect_init(&(DataPtr->edt), DataPtr->epan, TRUE, TRUE);
|
||||
epan_dissect_init(&(DataPtr->edt), cfile.epan, TRUE, TRUE);
|
||||
epan_dissect_run(&(DataPtr->edt), cfile.cd_t, &DataPtr->phdr, frame_tvbuff_new(DataPtr->frame, DataPtr->pd), DataPtr->frame, NULL);
|
||||
add_byte_views(&(DataPtr->edt), DataPtr->tree_view, DataPtr->bv_nb_ptr);
|
||||
proto_tree_draw(DataPtr->edt.tree, DataPtr->tree_view);
|
||||
|
@ -260,7 +259,7 @@ finfo_window_refresh(struct FieldinfoWinData *DataPtr)
|
|||
}
|
||||
|
||||
/* redisect */
|
||||
epan_dissect_init(&edt, DataPtr->epan, TRUE, TRUE);
|
||||
epan_dissect_init(&edt, cfile.epan, TRUE, TRUE);
|
||||
/* Makes any sense?
|
||||
if (old_finfo->hfinfo)
|
||||
proto_tree_prime_hfid(edt.tree, old_finfo->hfinfo->id);
|
||||
|
@ -723,7 +722,7 @@ edit_pkt_tree_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTre
|
|||
{
|
||||
struct FieldinfoWinData data;
|
||||
|
||||
data.epan = DataPtr->epan;
|
||||
data.epan = cfile.epan;
|
||||
data.frame = DataPtr->frame;
|
||||
data.phdr = DataPtr->phdr;
|
||||
data.pd = (guint8 *) g_memdup(DataPtr->pd, DataPtr->frame->cap_len);
|
||||
|
@ -742,7 +741,7 @@ edit_pkt_tree_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTre
|
|||
|
||||
proto_tree_draw(NULL, DataPtr->tree_view);
|
||||
epan_dissect_cleanup(&(DataPtr->edt));
|
||||
epan_dissect_init(&(DataPtr->edt), DataPtr->epan, TRUE, TRUE);
|
||||
epan_dissect_init(&(DataPtr->edt), cfile.epan, TRUE, TRUE);
|
||||
epan_dissect_run(&(DataPtr->edt), cfile.cd_t, &DataPtr->phdr, frame_tvbuff_new(DataPtr->frame, DataPtr->pd), DataPtr->frame, NULL);
|
||||
add_byte_views(&(DataPtr->edt), DataPtr->tree_view, DataPtr->bv_nb_ptr);
|
||||
proto_tree_draw(DataPtr->edt.tree, DataPtr->tree_view);
|
||||
|
@ -954,13 +953,12 @@ void new_packet_window(GtkWidget *w _U_, gboolean reference, gboolean editable _
|
|||
DataPtr = (struct PacketWinData *) g_malloc(sizeof(struct PacketWinData));
|
||||
|
||||
/* XXX, protect cfile.epan from closing (ref counting?) */
|
||||
DataPtr->epan = cfile.epan;
|
||||
DataPtr->frame = fd;
|
||||
DataPtr->phdr = cfile.phdr;
|
||||
DataPtr->pd = (guint8 *)g_malloc(DataPtr->frame->cap_len);
|
||||
memcpy(DataPtr->pd, ws_buffer_start_ptr(&cfile.buf), DataPtr->frame->cap_len);
|
||||
|
||||
epan_dissect_init(&(DataPtr->edt), DataPtr->epan, TRUE, TRUE);
|
||||
epan_dissect_init(&(DataPtr->edt), cfile.epan, TRUE, TRUE);
|
||||
epan_dissect_run(&(DataPtr->edt), cfile.cd_t, &DataPtr->phdr,
|
||||
frame_tvbuff_new(DataPtr->frame, DataPtr->pd),
|
||||
DataPtr->frame, &cfile.cinfo);
|
||||
|
|
Loading…
Reference in New Issue