Files
prysm/tools/beacon-fuzz/main.go
Preston Van Loon 2fd6bd8150 Add golang.org/x/tools modernize static analyzer and fix violations (#15946)
* Ran gopls modernize to fix everything

go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix -test ./...

* Override rules_go provided dependency for golang.org/x/tools to v0.38.0.

To update this, checked out rules_go, then ran `bazel run //go/tools/releaser -- upgrade-dep -mirror=false org_golang_x_tools` and copied the patches.

* Fix buildtag violations and ignore buildtag violations in external

* Introduce modernize analyzer package.

* Add modernize "any" analyzer.

* Fix violations of any analyzer

* Add modernize "appendclipped" analyzer.

* Fix violations of appendclipped

* Add modernize "bloop" analyzer.

* Add modernize "fmtappendf" analyzer.

* Add modernize "forvar" analyzer.

* Add modernize "mapsloop" analyzer.

* Add modernize "minmax" analyzer.

* Fix violations of minmax analyzer

* Add modernize "omitzero" analyzer.

* Add modernize "rangeint" analyzer.

* Fix violations of rangeint.

* Add modernize "reflecttypefor" analyzer.

* Fix violations of reflecttypefor analyzer.

* Add modernize "slicescontains" analyzer.

* Add modernize "slicessort" analyzer.

* Add modernize "slicesdelete" analyzer. This is disabled by default for now. See https://go.dev/issue/73686.

* Add modernize "stringscutprefix" analyzer.

* Add modernize "stringsbuilder" analyzer.

* Fix violations of stringsbuilder analyzer.

* Add modernize "stringsseq" analyzer.

* Add modernize "testingcontext" analyzer.

* Add modernize "waitgroup" analyzer.

* Changelog fragment

* gofmt

* gazelle

* Add modernize "newexpr" analyzer.

* Disable newexpr until go1.26

* Add more details in WORKSPACE on how to update the override

* @nalepae feedback on min()

* gofmt

* Fix violations of forvar
2025-11-14 01:27:22 +00:00

89 lines
2.1 KiB
Go

package main
import (
"bytes"
"flag"
"fmt"
"os"
"path/filepath"
"strconv"
"strings"
"text/template"
"github.com/OffchainLabs/prysm/v7/io/file"
)
var (
output = flag.String("output", "", "Output filepath for generated states file.")
)
const tpl = `// Code generated by //tools/beacon-fuzz:beacon-fuzz. DO NOT EDIT.
package {{.Package}}
// generateStates is a map of generated states from ssz.
var generatedStates = map[uint16]string{
{{.MapStr}}
}
`
// This program generates a map of ID(uint16) -> hex encoded strings of SSZ binary data. This tool
// exists to facilitate running beacon-fuzz targets within the constraints of fuzzit. I.e. fuzz
// only loads the corpus to the file system without the beacon states. An alternative approach would
// be to create a docker image where the state files are available or changing the corpus seed data
// to contain the beacon state itself.
func main() {
flag.Parse()
if *output == "" {
panic("Missing output. Usage: beacon-fuzz --output=out.go path/to/state/0 path/to/state/1 ...")
}
statePaths := os.Args[2:]
if len(statePaths) > 15 {
statePaths = statePaths[:15]
}
m := make(map[int][]byte, len(statePaths))
for _, p := range statePaths {
ID, err := strconv.Atoi(filepath.Base(p))
if err != nil {
panic(fmt.Sprintf("%s does not end in an integer for the filename.", p))
}
b, err := os.ReadFile(p) // #nosec G304
if err != nil {
panic(err)
}
m[ID] = b
}
res := execTmpl(tpl, input{Package: "testing", MapStr: sszBytesToMapStr(m)})
if err := file.WriteFile(*output, res.Bytes()); err != nil {
panic(err)
}
}
func sszBytesToMapStr(ss map[int][]byte) string {
var dst strings.Builder
for i, s := range ss {
dst.WriteString(fmt.Sprintf("%d: \"%x\",", i, s))
}
return dst.String()
}
type input struct {
Package string
States map[int][]byte
MapStr string
}
func execTmpl(tpl string, input any) *bytes.Buffer {
tmpl, err := template.New("template").Parse(tpl)
if err != nil {
panic(err)
}
buf := new(bytes.Buffer)
if err = tmpl.Execute(buf, input); err != nil {
panic(err)
}
return buf
}