@@ -98,7 +98,7 @@ func TestBulkEmptyOrNilDictionary(t *testing.T) {
98
98
}
99
99
}
100
100
101
- func TestBulkCompressEmptyOrNilContent (t * testing.T ) {
101
+ func TestBulkCompressDecompressEmptyOrNilContent (t * testing.T ) {
102
102
p := newBulkProcessor (t , dict , BestSpeed )
103
103
compressed , err := p .Compress (nil , nil )
104
104
if err != nil {
@@ -115,6 +115,14 @@ func TestBulkCompressEmptyOrNilContent(t *testing.T) {
115
115
if len (compressed ) < 4 {
116
116
t .Error ("magic number doesn't exist" )
117
117
}
118
+
119
+ decompressed , err := p .Decompress (nil , compressed )
120
+ if err != nil {
121
+ t .Error ("failed to decompress" )
122
+ }
123
+ if len (decompressed ) != 0 {
124
+ t .Error ("content was not decompressed correctly" )
125
+ }
118
126
}
119
127
120
128
func TestBulkCompressIntoGivenDestination (t * testing.T ) {
@@ -216,6 +224,31 @@ func TestBulkCompressAndDecompressInReverseOrder(t *testing.T) {
216
224
}
217
225
}
218
226
227
+ func TestBulkDecompressHighlyCompressable (t * testing.T ) {
228
+ p := newBulkProcessor (t , dict , BestSpeed )
229
+
230
+ // Generate a big payload
231
+ msgSize := 10 * 1000 * 1000 // 10 MiB
232
+ msg := make ([]byte , msgSize )
233
+ compressed , err := Compress (nil , msg )
234
+ if err != nil {
235
+ t .Error ("failed to compress" )
236
+ }
237
+
238
+ // Regular decompression would trigger zipbomb prevention
239
+ _ , err = p .Decompress (nil , compressed )
240
+ if ! IsDstSizeTooSmallError (err ) {
241
+ t .Error ("expected too small error" )
242
+ }
243
+
244
+ // Passing an output should suceed the decompression
245
+ dst := make ([]byte , 10 * msgSize )
246
+ _ , err = p .Decompress (dst , compressed )
247
+ if err != nil {
248
+ t .Errorf ("failed to decompress: %s" , err )
249
+ }
250
+ }
251
+
219
252
// BenchmarkBulkCompress-8 780148 1505 ns/op 61.14 MB/s 208 B/op 5 allocs/op
220
253
func BenchmarkBulkCompress (b * testing.B ) {
221
254
p := newBulkProcessor (b , dict , BestSpeed )
0 commit comments