From 7f34cab5e57d19953d56ac63820ea153805f6bc0 Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Wed, 19 Jan 2022 21:32:31 +0100 Subject: [PATCH] terminal: fix nil pointer dereference in pty.Getsize pty.Getsize() is used in the Draw function of the terminal widget and wraps the pty.GetsizeFull() function. However, pty.Getsize does not check the returned error from pty.GetsizeFull before dereferencing the winsize struct. In case of an error, this will cause a nil pointer deference and panic. This has been reported in the upstream package, but in the meantime, we can directly use pty.GetsizeFull. References: https://todo.sr.ht/~rjarry/aerc/11 Signed-off-by: Koni Marti --- widgets/terminal.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/widgets/terminal.go b/widgets/terminal.go index 68c9553..b6e8fc0 100644 --- a/widgets/terminal.go +++ b/widgets/terminal.go @@ -254,10 +254,13 @@ func (term *Terminal) Draw(ctx *ui.Context) { } } - rows, cols, err := pty.Getsize(term.pty) + ws, err := pty.GetsizeFull(term.pty) if err != nil { return } + rows := int(ws.Rows) + cols := int(ws.Cols) + if ctx.Width() != cols || ctx.Height() != rows { term.writeMutex.Lock() pty.Setsize(term.pty, &winsize)