From 1bab1754f095a5c0537fc639d0214f6efbb340a2 Mon Sep 17 00:00:00 2001 From: Reto Brunner Date: Tue, 28 Jul 2020 09:59:03 +0200 Subject: [PATCH] msgviewer: set max line length to 1 GB some people send around huge html without any newline in between. This did overflow the default 64KB buffer of bufio.Scanner. If something can't fit in a GB there's no hope left Also, ignoring errors is bad mkey --- widgets/msgviewer.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index d6085bf..107ff59 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "os" "os/exec" "regexp" "strings" @@ -641,11 +642,18 @@ func (pv *PartViewer) copyFilterOutToPager() { func (pv *PartViewer) copySourceToSinkStripAnsi() { scanner := bufio.NewScanner(pv.source) + // some people send around huge html without any newline in between + // this did overflow the default 64KB buffer of bufio.Scanner. + // If something can't fit in a GB there's no hope left + scanner.Buffer(nil, 1024*1024*1024) for scanner.Scan() { text := scanner.Text() text = ansi.ReplaceAllString(text, "") io.WriteString(pv.sink, text+"\n") } + if err := scanner.Err(); err != nil { + fmt.Fprintf(os.Stderr, "failed to read line: %v\n", err) + } } func (pv *PartViewer) Invalidate() {