@@ -18,6 +18,7 @@ package endpoint
18
18
19
19
import (
20
20
"bytes"
21
+ "crypto/rand"
21
22
"fmt"
22
23
"testing"
23
24
@@ -102,11 +103,39 @@ func (suite *LabelsSuite) TestEncryptionFailed() {
102
103
log .StandardLogger ().SetOutput (b )
103
104
104
105
_ = foo .Serialize (false , true , []byte ("wrong-key" ))
105
-
106
+
106
107
suite .True (fatalCrash , "should fail if encryption key is wrong" )
107
108
suite .Contains (b .String (), "Failed to encrypt the text" )
108
109
}
109
110
111
+ func (suite * LabelsSuite ) TestEncryptionFailedFaultyReader () {
112
+ foo , err := NewLabelsFromString (suite .fooAsTextEncrypted , suite .aesKey )
113
+ suite .NoError (err , "should succeed for valid label text" )
114
+
115
+ // remove encryption nonce just for simplicity, so that we could regenerate nonce
116
+ delete (foo , txtEncryptionNonce )
117
+
118
+ originalRandReader := rand .Reader
119
+ defer func () {
120
+ log .StandardLogger ().ExitFunc = nil
121
+ rand .Reader = originalRandReader
122
+ }()
123
+
124
+ // Replace rand.Reader with a faulty reader
125
+ rand .Reader = & faultyReader {}
126
+
127
+ b := new (bytes.Buffer )
128
+
129
+ var fatalCrash bool
130
+ log .StandardLogger ().ExitFunc = func (int ) { fatalCrash = true }
131
+ log .StandardLogger ().SetOutput (b )
132
+
133
+ _ = foo .Serialize (false , true , suite .aesKey )
134
+
135
+ suite .True (fatalCrash )
136
+ suite .Contains (b .String (), "Failed to generate cryptographic nonce" )
137
+ }
138
+
110
139
func (suite * LabelsSuite ) TestDeserialize () {
111
140
foo , err := NewLabelsFromStringPlain (suite .fooAsText )
112
141
suite .NoError (err , "should succeed for valid label text" )
0 commit comments