From 1bab1754f095a5c0537fc639d0214f6efbb340a2 Mon Sep 17 00:00:00 2001
From: Reto Brunner <reto@labrat.space>
Date: Tue, 28 Jul 2020 09:59:03 +0200
Subject: 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(+)

(limited to 'widgets')

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() {
-- 
cgit 1.4.1-2-gfad0