Source file src/debug/pe/fuzz_test.go

     1  // Copyright 2026 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package pe_test
     6  
     7  import (
     8  	"bytes"
     9  	"debug/pe"
    10  	"os"
    11  	"path/filepath"
    12  	"testing"
    13  )
    14  
    15  func FuzzReader(f *testing.F) {
    16  	if testing.Short() {
    17  		f.Skip("Skipping in short mode")
    18  	}
    19  
    20  	testdata, err := os.ReadDir("testdata")
    21  	if err != nil {
    22  		f.Fatalf("failed to read testdata directory: %s", err)
    23  	}
    24  	for _, de := range testdata {
    25  		if de.IsDir() || filepath.Ext(de.Name()) == ".c" {
    26  			continue
    27  		}
    28  		b, err := os.ReadFile(filepath.Join("testdata", de.Name()))
    29  		if err != nil {
    30  			f.Fatalf("failed to read testdata: %s", err)
    31  		}
    32  		f.Add(b)
    33  	}
    34  
    35  	f.Fuzz(func(t *testing.T, data []byte) {
    36  		f, err := pe.NewFile(bytes.NewReader(data))
    37  		if err != nil {
    38  			return
    39  		}
    40  		defer f.Close()
    41  		f.ImportedLibraries()
    42  		f.ImportedSymbols()
    43  		f.Section(".data")
    44  		f.Section(".text")
    45  		for _, c := range f.COFFSymbols {
    46  			_, err := c.FullName(f.StringTable)
    47  			if err != nil {
    48  				continue
    49  			}
    50  		}
    51  		dw, err := f.DWARF()
    52  		if err != nil {
    53  			return
    54  		}
    55  		dr := dw.Reader()
    56  		for {
    57  			e, _ := dr.Next()
    58  			if e == nil {
    59  				break
    60  			}
    61  		}
    62  	})
    63  }
    64  

View as plain text