From b31bb1876bee90434496d852f55a820fa3a26ca5 Mon Sep 17 00:00:00 2001 From: Robin Jarry Date: Mon, 19 Sep 2022 15:18:46 +0200 Subject: [PATCH] msgviewer: fix segfault when closing viewer There is a race between PartViewer.Cleanup and PartViewer.Draw. pv.term may be not nil in Draw and Cleanup() may set it to nil before pv.term.Draw() is called, causing an invalid memory access: [signal SIGSEGV: segmentation violation code=0x1 addr=0x29 pc=0x9413b8] git.sr.ht/~rjarry/aerc/widgets.(*Terminal).Draw(0x0?, 0x0?) git.sr.ht/~rjarry/aerc/widgets/terminal.go:97 +0x18 git.sr.ht/~rjarry/aerc/widgets.(*PartViewer).Draw(0xc00012a540, 0xc0026ea690) git.sr.ht/~rjarry/aerc/widgets/msgviewer.go:862 +0x2fd There is no need to reset term to nil. Fixes: 77f69501d648 ("msgviewer: properly close embedded terminal") Signed-off-by: Robin Jarry Acked-by: Tim Culverhouse --- widgets/msgviewer.go | 1 - 1 file changed, 1 deletion(-) diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index 33b6e72..d5d1d27 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -867,7 +867,6 @@ func (pv *PartViewer) Draw(ctx *ui.Context) { func (pv *PartViewer) Cleanup() { if pv.term != nil { pv.term.Close(nil) - pv.term = nil } }