diff options
author | Aldo Cortesi <aldo@corte.si> | 2017-12-15 09:48:41 +1300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-15 09:48:41 +1300 |
commit | d9848a8bc1b6a3ea7741c657133f09e969052e02 (patch) | |
tree | e4a85ba453482fd883478f48f3ed3ed59788189c | |
parent | 842c9f72f751ebc941090a78ea60cca6a8501937 (diff) | |
parent | 9f3806e27a2b1891354be6405538c5635e573317 (diff) | |
download | mitmproxy-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.py | 18 | ||||
-rw-r--r-- | mitmproxy/tools/web/master.py | 2 |
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", |