diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-05-07 10:51:14 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-05-07 10:51:14 +0000 |
commit | 709d04976c2ec8df56cc3bcff6ca22f72057e4bf (patch) | |
tree | 40f5aef748e441f0eb96fa68d44963efbfd97345 | |
parent | 6b38e752db65122dc4746b0c1b55d4790429a064 (diff) |
Avoid calling tvb_get_ptr() on 0-length TVBs.
It seems to be better fix than r42420
svn path=/trunk/; revision=42460
-rw-r--r-- | ui/gtk/main_proto_draw.c | 8 | ||||
-rw-r--r-- | ui/gtk/packet_win.c | 21 |
2 files changed, 7 insertions, 22 deletions
diff --git a/ui/gtk/main_proto_draw.c b/ui/gtk/main_proto_draw.c index 1fa5f33e46..cd773e9da0 100644 --- a/ui/gtk/main_proto_draw.c +++ b/ui/gtk/main_proto_draw.c @@ -133,9 +133,11 @@ get_byte_view_data_and_length(GtkWidget *byte_view, guint *data_len) if (byte_view_tvb == NULL) return NULL; - data_ptr = tvb_get_ptr(byte_view_tvb, 0, -1); - *data_len = tvb_length(byte_view_tvb); - return data_ptr; + if ((*data_len = tvb_length(byte_view_tvb))) { + data_ptr = tvb_get_ptr(byte_view_tvb, 0, -1); + return data_ptr; + } else + return ""; } /* diff --git a/ui/gtk/packet_win.c b/ui/gtk/packet_win.c index 93d896a970..dd2921e1ab 100644 --- a/ui/gtk/packet_win.c +++ b/ui/gtk/packet_win.c @@ -892,25 +892,8 @@ void new_packet_window(GtkWidget *w _U_, gboolean editable _U_) DataPtr->frame = cfile.current_frame; memcpy(&DataPtr->pseudo_header, &cfile.pseudo_header, sizeof DataPtr->pseudo_header); - if (DataPtr->frame->cap_len != 0) { - DataPtr->pd = g_malloc(DataPtr->frame->cap_len); - memcpy(DataPtr->pd, cfile.pd, DataPtr->frame->cap_len); - } else { - /* g_malloc(0) returns NULL and we should NOT pass NULL pd to epan_dissect_run. - * (in such case TVBUFF_REAL_DATA is created with NULL real_data) - * - * Call to tvb_get_ptr(tvb_with_null_real_data, 0, -1) generates assertion: - * Unhandled exception ("tvbuff.c:925: failed assertion "DISSECTOR_ASSERT_NOT_REACHED"", group=1, code=4) - * - * Backtrace: - * #4 0x00007fecbd71bd07 in except_throw () from /tmp/wireshark/epan/.libs/libwireshark.so.0 - * #5 0x00007fecbd74741b in ensure_contiguous_no_exception () from /tmp/wireshark/epan/.libs/libwireshark.so.0 - * #6 0x00007fecbd747438 in ensure_contiguous () from /tmp/wireshark/epan/.libs/libwireshark.so.0 - * #7 0x0000000000460741 in get_byte_view_data_and_length () - * #8 0x0000000000461134 in byte_view_realize_cb () - */ - DataPtr->pd = g_strdup(""); - } + DataPtr->pd = g_malloc(DataPtr->frame->cap_len); + memcpy(DataPtr->pd, cfile.pd, DataPtr->frame->cap_len); epan_dissect_init(&(DataPtr->edt), TRUE, TRUE); epan_dissect_run(&(DataPtr->edt), &DataPtr->pseudo_header, DataPtr->pd, |