From ba82f0bef99299a2c8a7a9cacde55c28568c9c3b Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 7 Mar 2020 11:20:44 +0900 Subject: [PATCH] Do not read more than 10K characters from /dev/tty This might help with #1456 where fzf hangs consuming CPU resources. --- src/tui/light.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/tui/light.go b/src/tui/light.go index fbc76f5..d8de4b6 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -23,6 +23,7 @@ const ( defaultEscDelay = 100 escPollInterval = 5 offsetPollTries = 10 + maxInputBuffer = 10 * 1024 ) const consoleDevice string = "/dev/tty" @@ -317,6 +318,13 @@ func (r *LightRenderer) getBytesInternal(buffer []byte, nonblock bool) []byte { } buffer = append(buffer, byte(c)) pc = c + + // This should never happen under normal conditions, + // so terminate fzf immediately. + if len(buffer) > maxInputBuffer { + r.Close() + panic(fmt.Sprintf("Input buffer overflow (%d): %v", len(buffer), buffer)) + } } return buffer