@@ -260,6 +260,95 @@ func TestScanArchive(t *testing.T) {
260260 }
261261}
262262
263+ func extractError (e error ) error {
264+ if strings .Contains (e .Error (), "not a valid gzip archive" ) || strings .Contains (e .Error (), "not a valid zip file" ) {
265+ return nil
266+ }
267+ return e
268+ }
269+
270+ func TestScanInvalidArchive (t * testing.T ) {
271+ t .Parallel ()
272+ ctx := slogtest .Context (t )
273+ clog .FromContext (ctx ).With ("test" , "scan_archive" )
274+
275+ var out bytes.Buffer
276+ r , err := render .New ("json" , & out )
277+ if err != nil {
278+ t .Fatalf ("render: %v" , err )
279+ }
280+
281+ rfs := []fs.FS {rules .FS , thirdparty .FS }
282+ yrs , err := CachedRules (ctx , rfs )
283+ if err != nil {
284+ t .Fatalf ("rules: %v" , err )
285+ }
286+
287+ mc := malcontent.Config {
288+ Concurrency : runtime .NumCPU (),
289+ ExitExtraction : true ,
290+ IgnoreSelf : false ,
291+ MinFileRisk : 0 ,
292+ MinRisk : 0 ,
293+ Renderer : r ,
294+ Rules : yrs ,
295+ ScanPaths : []string {
296+ "testdata/17419.zip" ,
297+ "testdata/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz" ,
298+ },
299+ }
300+ _ , err = Scan (ctx , mc )
301+ err = extractError (err )
302+ if err != nil {
303+ t .Fatal (err )
304+ }
305+ }
306+
307+ func TestScanInvalidArchiveIgnore (t * testing.T ) {
308+ t .Parallel ()
309+ ctx := slogtest .Context (t )
310+ clog .FromContext (ctx ).With ("test" , "scan_archive" )
311+
312+ var out bytes.Buffer
313+ r , err := render .New ("json" , & out )
314+ if err != nil {
315+ t .Fatalf ("render: %v" , err )
316+ }
317+
318+ rfs := []fs.FS {rules .FS , thirdparty .FS }
319+ yrs , err := CachedRules (ctx , rfs )
320+ if err != nil {
321+ t .Fatalf ("rules: %v" , err )
322+ }
323+
324+ mc := malcontent.Config {
325+ Concurrency : runtime .NumCPU (),
326+ ExitExtraction : false ,
327+ IgnoreSelf : false ,
328+ MinFileRisk : 0 ,
329+ MinRisk : 0 ,
330+ Renderer : r ,
331+ Rules : yrs ,
332+ ScanPaths : []string {
333+ "testdata/17419.zip" ,
334+ "testdata/joblib_0.9.4.dev0_compressed_cache_size_pickle_py35_np19.gz" ,
335+ },
336+ }
337+ res , err := Scan (ctx , mc )
338+ if err != nil {
339+ t .Fatal (err )
340+ }
341+ if err := r .Full (ctx , nil , res ); err != nil {
342+ t .Fatalf ("full: %v" , err )
343+ }
344+
345+ got := out .String ()
346+ want := "{}\n "
347+ if diff := cmp .Diff (want , got ); diff != "" {
348+ t .Errorf ("output mismatch: (-want +got):\n %s" , diff )
349+ }
350+ }
351+
263352func TestGetExt (t * testing.T ) {
264353 tests := []struct {
265354 path string
0 commit comments