@@ -60,7 +60,7 @@ func TestValid(t *testing.T) {
6060 }
6161}
6262
63- func TestValidIgnoreLength (t * testing.T ) {
63+ func TestNegativeExpectedSize (t * testing.T ) {
6464 for size := 1 ; size <= 16384 ; size *= 2 {
6565 t .Run (fmt .Sprintf ("size:%d" , size ), func (t * testing.T ) {
6666 // Fill buffer with random data.
@@ -76,13 +76,22 @@ func TestValidIgnoreLength(t *testing.T) {
7676 ExpectedSize : - 1 ,
7777 }
7878
79- // Make sure if we copy-to-EOF we get no errors.
80- _ , err = io .Copy (io .Discard , verifiedReader )
81- require .NoError (t , err , "digest (size ignored) should be correct on EOF" )
79+ // Make sure that negative ExpectedSize always fails.
80+ n , err := io .Copy (io .Discard , verifiedReader )
81+ require .Error (t , err , "io.Copy (with ExpectedSize < 0) should fail" )
82+ require .Zero (t , n , "io.Copy (with ExpectedSize < 0) should read nothing" )
83+ assert .ErrorIs (t , err , ErrInvalidExpectedSize , "io.Copy (with ExpectedSize < 0) should fail" )
84+
85+ // Bad ExpectedSize should read no data.
86+ assert .EqualValues (t , size , buffer .Len (), "io.Copy (with ExpectedSize < 0) should not have read any data" )
8287
8388 // And on close we shouldn't get an error either.
8489 err = verifiedReader .Close ()
85- require .NoError (t , err , "digest (size ignored) should be correct on Close" )
90+ require .Error (t , err , "Close (with ExpectedSize < 0) should fail" )
91+ assert .ErrorIs (t , err , ErrInvalidExpectedSize , "Close (with ExpectedSize < 0) should fail" )
92+
93+ // Bad ExpectedSize should read no data.
94+ assert .EqualValues (t , size , buffer .Len (), "close (with ExpectedSize < 0) should not have read any data" )
8695 })
8796 }
8897}
@@ -100,7 +109,7 @@ func TestValidTrailing(t *testing.T) {
100109 verifiedReader := & VerifiedReadCloser {
101110 Reader : io .NopCloser (buffer ),
102111 ExpectedDigest : expectedDigest ,
103- ExpectedSize : - 1 ,
112+ ExpectedSize : int64 ( size ) ,
104113 }
105114
106115 // Read *half* of the bytes, leaving some remaining. We should get
@@ -147,44 +156,6 @@ func TestInvalidDigest(t *testing.T) {
147156 }
148157}
149158
150- func TestInvalidDigest_Trailing_NoExpectedSize (t * testing.T ) {
151- for size := 1 ; size <= 16384 ; size *= 2 {
152- for delta := 1 ; delta - 1 <= size / 2 ; delta *= 2 {
153- t .Run (fmt .Sprintf ("size:%d_delta:%d" , size , delta ), func (t * testing.T ) {
154- // Fill buffer with random data.
155- buffer := new (bytes.Buffer )
156- _ , err := io .CopyN (buffer , rand .Reader , int64 (size ))
157- require .NoError (t , err , "fill buffer with random data" )
158-
159- // Generate a correct hash (for a shorter buffer), but don't
160- // verify the size -- this is to make sure that we actually
161- // read all the bytes.
162- shortBuffer := buffer .Bytes ()[:size - delta ]
163- expectedDigest := digest .SHA256 .FromBytes (shortBuffer )
164- verifiedReader := & VerifiedReadCloser {
165- Reader : io .NopCloser (buffer ),
166- ExpectedDigest : expectedDigest ,
167- ExpectedSize : - 1 ,
168- }
169-
170- // Read up to the end of the short buffer. We should get no
171- // errors.
172- _ , err = io .CopyN (io .Discard , verifiedReader , int64 (size - delta ))
173- require .NoErrorf (t , err , "should get no errors when reading %d (%d-%d) bytes" , size - delta , size , delta )
174-
175- // Check that the digest does actually match right now.
176- verifiedReader .init ()
177- err = verifiedReader .verify (nil )
178- require .NoError (t , err , "digest check should succeed at the point we finish the subset" )
179-
180- // On close we should get the error.
181- err = verifiedReader .Close ()
182- assert .ErrorIs (t , err , ErrDigestMismatch , "digest should be invalid on Close" ) //nolint:testifylint // assert.*Error* makes more sense
183- })
184- }
185- }
186- }
187-
188159func TestInvalidSize_LongBuffer (t * testing.T ) {
189160 for size := 1 ; size <= 16384 ; size *= 2 {
190161 for delta := 1 ; delta - 1 <= size / 2 ; delta *= 2 {
0 commit comments