aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/rtp_stream_dialog.cpp
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2015-10-01 16:56:01 +0200
committerMichael Mann <mmann78@netscape.net>2015-10-01 20:46:50 +0000
commitb02a0ee48a51ccbb33ad76ce84ecb05409a6973a (patch)
treeac9accb993abff51e62b671699a1e4afcfd11bac /ui/qt/rtp_stream_dialog.cpp
parentba5df1eea67b9e1cfde0a0d649d1b6db560fb745 (diff)
Fix crashes related to RTP Streams analysis
The data that describes RTP streams become invalid when packets are re-dissected. This results in a crash in GTK when the "RTP Analyse" option is used and and a crash in Qt when the display filter is changed while the RTP Streams dialog is open. Fix this by adding a tap_reset callback (modelled after mcaststream) to the RTP tap listener that allows the GTK+ and Qt dialogs to clear the displayed list of RTP streams. Bug: 10016 Change-Id: I7478678db63d7ac8110c44c163844e9f66fad9e9 Reviewed-on: https://code.wireshark.org/review/10728 Reviewed-by: Peter Wu <peter@lekensteyn.nl> Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'ui/qt/rtp_stream_dialog.cpp')
-rw-r--r--ui/qt/rtp_stream_dialog.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/ui/qt/rtp_stream_dialog.cpp b/ui/qt/rtp_stream_dialog.cpp
index 52f96008b0..fa77c8e864 100644
--- a/ui/qt/rtp_stream_dialog.cpp
+++ b/ui/qt/rtp_stream_dialog.cpp
@@ -265,6 +265,7 @@ RtpStreamDialog::RtpStreamDialog(QWidget &parent, CaptureFile &cf) :
/* Register the tap listener */
memset(&tapinfo_, 0, sizeof(rtpstream_tapinfo_t));
+ tapinfo_.tap_reset = tapReset;
tapinfo_.tap_draw = tapDraw;
tapinfo_.tap_mark_packet = tapMarkPacket;
tapinfo_.tap_data = this;
@@ -314,6 +315,15 @@ bool RtpStreamDialog::eventFilter(QObject *, QEvent *event)
return false;
}
+void RtpStreamDialog::tapReset(rtpstream_tapinfo_t *tapinfo)
+{
+ RtpStreamDialog *rtp_stream_dialog = dynamic_cast<RtpStreamDialog *>((RtpStreamDialog *)tapinfo->tap_data);
+ if (rtp_stream_dialog) {
+ /* invalidate items which refer to old strinfo_list items. */
+ rtp_stream_dialog->ui->streamTreeWidget->clear();
+ }
+}
+
void RtpStreamDialog::tapDraw(rtpstream_tapinfo_t *tapinfo)
{
RtpStreamDialog *rtp_stream_dialog = dynamic_cast<RtpStreamDialog *>((RtpStreamDialog *)tapinfo->tap_data);