aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2012-05-07 10:51:14 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2012-05-07 10:51:14 +0000
commit709d04976c2ec8df56cc3bcff6ca22f72057e4bf (patch)
tree40f5aef748e441f0eb96fa68d44963efbfd97345
parent6b38e752db65122dc4746b0c1b55d4790429a064 (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.c8
-rw-r--r--ui/gtk/packet_win.c21
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,