Просмотр исходного кода

Enforce code coverage of secret

tags/v2.0.0-rc1
9seconds 5 лет назад
Родитель
Сommit
5941f0674a
2 измененных файлов: 27 добавлений и 23 удалений
  1. 16
    22
      mtglib/secret.go
  2. 11
    1
      mtglib/secret_test.go

+ 16
- 22
mtglib/secret.go Просмотреть файл

@@ -5,13 +5,12 @@ import (
5 5
 	"encoding/base64"
6 6
 	"encoding/hex"
7 7
 	"fmt"
8
-	"strings"
9 8
 )
10 9
 
11 10
 const (
12 11
 	SecretKeyLength = 16
13 12
 
14
-	secretFakeTLSFirstByte byte = 238
13
+	secretFakeTLSFirstByte byte = 0xee
15 14
 )
16 15
 
17 16
 var secretEmptyKey [SecretKeyLength]byte
@@ -35,31 +34,26 @@ func (s *Secret) UnmarshalText(data []byte) error {
35 34
 		return ErrSecretEmpty
36 35
 	}
37 36
 
38
-	var (
39
-		decoded []byte
40
-		err     error
41
-	)
42
-
43
-	if strings.HasPrefix(text, "ee") {
44
-		decoded, err = hex.DecodeString(strings.TrimPrefix(text, "ee"))
45
-	}
46
-
47
-	if err != nil || len(decoded) <= SecretKeyLength {
37
+	decoded, err := hex.DecodeString(text)
38
+	if err != nil {
48 39
 		decoded, err = base64.RawURLEncoding.DecodeString(text)
40
+	}
49 41
 
50
-		if err != nil {
51
-			return fmt.Errorf("incorrect secret format: %w", err)
52
-		}
42
+	if err != nil {
43
+		return fmt.Errorf("incorrect secret format: %w", err)
44
+	}
53 45
 
54
-		if len(decoded) <= SecretKeyLength {
55
-			return fmt.Errorf("secret has incorrect length %d", len(text))
56
-		}
46
+	if len(decoded) < 2 { // nolint: gomnd // we need at least 1 byte here
47
+		return fmt.Errorf("secret is truncated, length=%d", len(decoded))
48
+	}
57 49
 
58
-		if decoded[0] != secretFakeTLSFirstByte {
59
-			return fmt.Errorf("incorrect first byte: %v", decoded[0])
60
-		}
50
+	if decoded[0] != secretFakeTLSFirstByte {
51
+		return fmt.Errorf("incorrect first byte of secret: %#x", decoded[0])
52
+	}
61 53
 
62
-		decoded = decoded[1:]
54
+	decoded = decoded[1:]
55
+	if len(decoded) < SecretKeyLength {
56
+		return fmt.Errorf("secret has incorrect length %d", len(decoded))
63 57
 	}
64 58
 
65 59
 	copy(s.Key[:], decoded[:SecretKeyLength])

+ 11
- 1
mtglib/secret_test.go Просмотреть файл

@@ -45,8 +45,14 @@ func (suite *SecretTestSuite) TestParseSecret() {
45 45
 }
46 46
 
47 47
 func (suite *SecretTestSuite) TestSerialize() {
48
+	s := mtglib.Secret{}
49
+
50
+	data, err := s.MarshalText()
51
+	suite.NoError(err)
52
+	suite.Empty(data)
53
+
48 54
 	secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665")
49
-	s := mtglib.Secret{
55
+	s = mtglib.Secret{
50 56
 		Host: "google.com",
51 57
 	}
52 58
 
@@ -77,6 +83,10 @@ func (suite *SecretTestSuite) TestIncorrectSecret() {
77 83
 		"+ueJ0q91t5XOnFYP8Xac3A",
78 84
 		"eed11c6cbbd9efe7fed5bc0db220b09665",
79 85
 		"ed11c6cbbd9efe7fed5bc0db220b09665",
86
+		"",
87
+		"+**",
88
+		"ee",
89
+		"efd11c6cbbd9efe7fed5bc0db220b09665",
80 90
 	}
81 91
 
82 92
 	for _, v := range testData {

Загрузка…
Отмена
Сохранить