file: do not perform recursive redissections to avoid crashes
authorPeter Wu <peter@lekensteyn.nl>
Thu, 28 Jun 2018 00:28:06 +0000 (17:28 -0700)
committerAnders Broman <a.broman58@gmail.com>
Thu, 28 Jun 2018 21:14:01 +0000 (21:14 +0000)
commit8e07b778f6a79b17e905f52e5e0e8c9187c091bd
treea79a1dafe095ec517a08e3957a38a9cde2080502
parent411c5e9dcfa78d5eeadcdc357cb99ffb7b423ce2
file: do not perform recursive redissections to avoid crashes

When packets are being read (in "cf_read") or rescanned/redissected (in
"rescan_packets"), it could call "update_progress_dlg". That could end
up accepting GUI actions such as changing profiles (which triggers a
redissection via "cf_redissect_packets") or changing the display filter
(which triggers another "rescan_packets" via "cf_filter_packets").

Such recursive calls waste CPU and in case of "cf_redissect_packets" it
also causes memory corruption (since "cf->epan" is destroyed while
"cf_read" tries to read and process packets).

Fix this by delaying the rescan/redissection when an existing rescan is
pending. Abort an existing rescan/redissection if a new redissection
(due to profile changes) or rescan (due to display filter changes) is
requested and restart this to ensure that the intended user action is
applied (such as a new display filter).

Bug: 14918
Change-Id: I646730f639b20aa9ec35306e3f11bf22f5923786
Reviewed-on: https://code.wireshark.org/review/28500
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
cfile.h
file.c