aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-10-04 13:06:55 -0500
committerRobin Jarry <robin@jarry.cc>2022-10-05 21:14:18 +0200
commitd2f4f12f66bc2f632a8a47190fae08ec67c9072e (patch)
treeb9259b18d242111ae79bfef9317d811bc49fd1e6
parentd99b6081f7464e332fbad4e79d6004a8a8698e2f (diff)
downloadaerc-d2f4f12f66bc2f632a8a47190fae08ec67c9072e.tar.gz
compose: avoid double lock in MouseEvent
The MouseEvent locks the composer, and also calls FocusEditor which attempts to lock the composer. This results in a deadlock. No need to call FocusEditor which takes a name as parameter and needs to iterate over all editors to find the correct one. We already have the headerEditor object, use it directly. Fixes: bf2bf8c242cb ("compose: prevent out of bounds access") Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Signed-off-by: Robin Jarry <robin@jarry.cc>
-rw-r--r--widgets/compose.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/widgets/compose.go b/widgets/compose.go
index ee07d1cd..eca76842 100644
--- a/widgets/compose.go
+++ b/widgets/compose.go
@@ -618,10 +618,13 @@ func (c *Composer) MouseEvent(localX int, localY int, event tcell.Event) {
c.Lock()
defer c.Unlock()
c.grid.MouseEvent(localX, localY, event)
- for _, e := range c.focusable {
+ for i, e := range c.focusable {
he, ok := e.(*headerEditor)
if ok && he.focused {
- c.FocusEditor(he.name)
+ c.focusable[c.focused].Focus(false)
+ c.focused = i
+ c.focusable[c.focused].Focus(true)
+ return
}
}
}