From 3cf6c82633fb153663e7927e20818f355d949a89 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sun, 26 May 2019 11:18:51 -0400 Subject: [PATCH] msgviewer: copy stderr into pager This prevents a broken filter config from being a silent error --- widgets/msgviewer.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index 39ee637..e0fe6aa 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -386,15 +386,31 @@ func (pv *PartViewer) attemptCopy() { header.SetText("Content-Description", pv.part.Description) if pv.filter != nil { stdout, _ := pv.filter.StdoutPipe() + stderr, _ := pv.filter.StderrPipe() pv.filter.Start() + ch := make(chan interface{}) go func() { _, err := io.Copy(pv.pagerin, stdout) if err != nil { pv.err = err pv.Invalidate() } - pv.pagerin.Close() stdout.Close() + ch <- nil + }() + go func() { + _, err := io.Copy(pv.pagerin, stderr) + if err != nil { + pv.err = err + pv.Invalidate() + } + stderr.Close() + ch <- nil + }() + go func() { + <-ch + <-ch + pv.pagerin.Close() }() } go func() {