aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2017-12-15 09:48:41 +1300
committerGitHub <noreply@github.com>2017-12-15 09:48:41 +1300
commitd9848a8bc1b6a3ea7741c657133f09e969052e02 (patch)
treee4a85ba453482fd883478f48f3ed3ed59788189c
parent842c9f72f751ebc941090a78ea60cca6a8501937 (diff)
parent9f3806e27a2b1891354be6405538c5635e573317 (diff)
downloadmitmproxy-d9848a8bc1b6a3ea7741c657133f09e969052e02.tar.gz
mitmproxy-d9848a8bc1b6a3ea7741c657133f09e969052e02.tar.bz2
mitmproxy-d9848a8bc1b6a3ea7741c657133f09e969052e02.zip
Merge pull request #2675 from mhils/issue-2673
Fix #2673
-rw-r--r--mitmproxy/addons/view.py18
-rw-r--r--mitmproxy/tools/web/master.py2
2 files changed, 12 insertions, 8 deletions
diff --git a/mitmproxy/addons/view.py b/mitmproxy/addons/view.py
index 8381e025..e45f2baf 100644
--- a/mitmproxy/addons/view.py
+++ b/mitmproxy/addons/view.py
@@ -406,8 +406,11 @@ class View(collections.Sequence):
if f.killable:
f.kill()
if f in self._view:
+ # We manually pass the index here because multiple flows may have the same
+ # sorting key, and we cannot reconstruct the index from that.
+ idx = self._view.index(f)
self._view.remove(f)
- self.sig_view_remove.send(self, flow=f)
+ self.sig_view_remove.send(self, flow=f, index=idx)
del self._store[f.id]
self.sig_store_remove.send(self, flow=f)
if len(flows) > 1:
@@ -507,11 +510,12 @@ class View(collections.Sequence):
self.sig_view_update.send(self, flow=f)
else:
try:
- self._view.remove(f)
- self.sig_view_remove.send(self, flow=f)
+ idx = self._view.index(f)
except ValueError:
- # The value was not in the view
- pass
+ pass # The value was not in the view
+ else:
+ self._view.remove(f)
+ self.sig_view_remove.send(self, flow=f, index=idx)
class Focus:
@@ -554,11 +558,11 @@ class Focus:
def _nearest(self, f, v):
return min(v._bisect(f), len(v) - 1)
- def _sig_view_remove(self, view, flow):
+ def _sig_view_remove(self, view, flow, index):
if len(view) == 0:
self.flow = None
elif flow is self.flow:
- self.flow = view[self._nearest(self.flow, view)]
+ self.index = min(index, len(self.view) - 1)
def _sig_view_refresh(self, view):
if len(view) == 0:
diff --git a/mitmproxy/tools/web/master.py b/mitmproxy/tools/web/master.py
index 694ee2f7..4c597f0e 100644
--- a/mitmproxy/tools/web/master.py
+++ b/mitmproxy/tools/web/master.py
@@ -60,7 +60,7 @@ class WebMaster(master.Master):
data=app.flow_to_json(flow)
)
- def _sig_view_remove(self, view, flow):
+ def _sig_view_remove(self, view, flow, index):
app.ClientConnection.broadcast(
resource="flows",
cmd="remove",