瀏覽代碼

Merge pull request #36918 from Sh4d1/master

add verification to check if escapeKeys have elements (pkg/term/proxy.go)
Sebastiaan van Stijn 7 年之前
父節點
當前提交
d4e48af48d
共有 2 個文件被更改,包括 32 次插入2 次删除
  1. 4 0
      pkg/term/proxy.go
  2. 28 2
      pkg/term/proxy_test.go

+ 4 - 0
pkg/term/proxy.go

@@ -34,6 +34,10 @@ func NewEscapeProxy(r io.Reader, escapeKeys []byte) io.Reader {
 func (r *escapeProxy) Read(buf []byte) (int, error) {
 	nr, err := r.r.Read(buf)
 
+	if len(r.escapeKeys) == 0 {
+		return nr, err
+	}
+
 	preserve := func() {
 		// this preserves the original key presses in the passed in buffer
 		nr += r.escapeKeyPos

+ 28 - 2
pkg/term/proxy_test.go

@@ -10,8 +10,8 @@ import (
 )
 
 func TestEscapeProxyRead(t *testing.T) {
-	escapeKeys, _ := ToBytes("DEL")
-	keys, _ := ToBytes("a,b,c,+")
+	escapeKeys, _ := ToBytes("")
+	keys, _ := ToBytes("a")
 	reader := NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
 	buf := make([]byte, len(keys))
 	nr, err := reader.Read(buf)
@@ -19,6 +19,32 @@ func TestEscapeProxyRead(t *testing.T) {
 	assert.Equal(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys)))
 	assert.DeepEqual(t, keys, buf)
 
+	keys, _ = ToBytes("a,b,c")
+	reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
+	buf = make([]byte, len(keys))
+	nr, err = reader.Read(buf)
+	assert.NilError(t, err)
+	assert.Equal(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys)))
+	assert.DeepEqual(t, keys, buf)
+
+	keys, _ = ToBytes("")
+	reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
+	buf = make([]byte, len(keys))
+	nr, err = reader.Read(buf)
+	assert.Assert(t, is.ErrorContains(err, ""), "Should throw error when no keys are to read")
+	assert.Equal(t, nr, 0, "nr should be zero")
+	assert.Check(t, is.Len(keys, 0))
+	assert.Check(t, is.Len(buf, 0))
+
+	escapeKeys, _ = ToBytes("DEL")
+	keys, _ = ToBytes("a,b,c,+")
+	reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
+	buf = make([]byte, len(keys))
+	nr, err = reader.Read(buf)
+	assert.NilError(t, err)
+	assert.Equal(t, nr, len(keys), fmt.Sprintf("nr %d should be equal to the number of %d", nr, len(keys)))
+	assert.DeepEqual(t, keys, buf)
+
 	keys, _ = ToBytes("")
 	reader = NewEscapeProxy(bytes.NewReader(keys), escapeKeys)
 	buf = make([]byte, len(keys))