From 8e7f278094e70b54d3d8e385bd97500858c0e560 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sun, 12 Jan 2020 13:55:19 +1100 Subject: [PATCH] use mutexes on escape code --- go.mod | 2 +- go.sum | 4 ++-- vendor/github.com/jesseduffield/gocui/escape.go | 17 ++++++++++++++++- vendor/modules.txt | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7b32b71c5..bc6398a34 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/golang/protobuf v1.3.2 // indirect github.com/google/go-cmp v0.3.1 // indirect github.com/integrii/flaggy v1.4.0 - github.com/jesseduffield/gocui v0.3.1-0.20200112022728-874f1f64ada7 + github.com/jesseduffield/gocui v0.3.1-0.20200112025325-6c933915c351 github.com/jesseduffield/pty v1.2.1 github.com/jesseduffield/rollrus v0.0.0-20190701125922-dd028cb0bfd7 github.com/jesseduffield/termbox-go v0.0.0-20190630083001-9dd53af7214e // indirect diff --git a/go.sum b/go.sum index 1b091a75a..2fd3dc495 100644 --- a/go.sum +++ b/go.sum @@ -79,8 +79,8 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jesseduffield/gocui v0.3.1-0.20191116013947-b13bda319532 h1:V1Lk2rm5/p27NjnlF2ezzkxDaisHNcveMNueSD7RYgs= github.com/jesseduffield/gocui v0.3.1-0.20191116013947-b13bda319532/go.mod h1:2RtZznzYKt8RLRwvFiSkXjU0Ei8WwHdubgnlaYH47dw= -github.com/jesseduffield/gocui v0.3.1-0.20200112022728-874f1f64ada7 h1:tUFXrq4adXbLukiRhHBDkmk306mhEzdxhEtKbix4FeQ= -github.com/jesseduffield/gocui v0.3.1-0.20200112022728-874f1f64ada7/go.mod h1:2RtZznzYKt8RLRwvFiSkXjU0Ei8WwHdubgnlaYH47dw= +github.com/jesseduffield/gocui v0.3.1-0.20200112025325-6c933915c351 h1:+sSqd2YotacWt+1MNRN8ZmXnYoiJeblZeptzKiHIyv0= +github.com/jesseduffield/gocui v0.3.1-0.20200112025325-6c933915c351/go.mod h1:2RtZznzYKt8RLRwvFiSkXjU0Ei8WwHdubgnlaYH47dw= github.com/jesseduffield/pty v1.2.1 h1:7xYBiwNH0PpWqC8JmvrPq1a/ksNqyCavzWu9pbBGYWI= github.com/jesseduffield/pty v1.2.1/go.mod h1:7jlS40+UhOqkZJDIG1B/H21xnuET/+fvbbnHCa8wSIo= github.com/jesseduffield/roll v0.0.0-20190629104057-695be2e62b00 h1:+JaOkfBNYQYlGD7dgru8mCwYNEc5tRRI8mThlVANhSM= diff --git a/vendor/github.com/jesseduffield/gocui/escape.go b/vendor/github.com/jesseduffield/gocui/escape.go index c88309b07..c09003e31 100644 --- a/vendor/github.com/jesseduffield/gocui/escape.go +++ b/vendor/github.com/jesseduffield/gocui/escape.go @@ -5,8 +5,10 @@ package gocui import ( - "github.com/go-errors/errors" "strconv" + "sync" + + "github.com/go-errors/errors" ) type escapeInterpreter struct { @@ -15,6 +17,7 @@ type escapeInterpreter struct { csiParam []string curFgColor, curBgColor Attribute mode OutputMode + mutex sync.Mutex } type escapeState int @@ -34,6 +37,9 @@ var ( // runes in case of error will output the non-parsed runes as a string. func (ei *escapeInterpreter) runes() []rune { + ei.mutex.Lock() + defer ei.mutex.Unlock() + switch ei.state { case stateNone: return []rune{0x1b} @@ -66,6 +72,9 @@ func newEscapeInterpreter(mode OutputMode) *escapeInterpreter { // reset sets the escapeInterpreter in initial state. func (ei *escapeInterpreter) reset() { + ei.mutex.Lock() + defer ei.mutex.Unlock() + ei.state = stateNone ei.curFgColor = ColorDefault ei.curBgColor = ColorDefault @@ -76,6 +85,9 @@ func (ei *escapeInterpreter) reset() { // of an escape sequence, and as such should not be printed verbatim. Otherwise, // it's not an escape sequence. func (ei *escapeInterpreter) parseOne(ch rune) (isEscape bool, err error) { + ei.mutex.Lock() + defer ei.mutex.Unlock() + // Sanity checks if len(ei.csiParam) > 20 { return false, errCSITooLong @@ -179,6 +191,9 @@ func (ei *escapeInterpreter) outputNormal() error { // 0x11 - 0xe8: 216 different colors // 0xe9 - 0x1ff: 24 different shades of grey func (ei *escapeInterpreter) output256() error { + ei.mutex.Lock() + defer ei.mutex.Unlock() + if len(ei.csiParam) < 3 { return ei.outputNormal() } diff --git a/vendor/modules.txt b/vendor/modules.txt index 9f0a28176..80c8a96db 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -32,7 +32,7 @@ github.com/hashicorp/hcl/json/token github.com/integrii/flaggy # github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 github.com/jbenet/go-context/io -# github.com/jesseduffield/gocui v0.3.1-0.20200112022728-874f1f64ada7 +# github.com/jesseduffield/gocui v0.3.1-0.20200112025325-6c933915c351 github.com/jesseduffield/gocui # github.com/jesseduffield/pty v1.2.1 github.com/jesseduffield/pty