├── .envrc ├── rust-toolchain.toml ├── harnesses ├── path_constraint │ ├── go.mod │ └── harness.go ├── burntsushi-toml │ ├── go.mod │ ├── go.sum │ └── harness.go ├── promql │ ├── go.mod │ ├── harness.go │ └── go.sum ├── README.md └── caddy │ ├── harness.go │ └── go.mod ├── other_fuzzers ├── go_fuzz │ ├── path_constraint │ │ ├── fuzz.sh │ │ ├── build.sh │ │ ├── go.mod │ │ ├── get_cov.sh │ │ ├── harness_fuzz.go │ │ ├── go.sum │ │ ├── harness.go │ │ └── harness_test.go │ └── README.md ├── native_fuzzing │ ├── path_constraint │ │ ├── go.mod │ │ ├── fuzz.sh │ │ ├── harness_test.go │ │ ├── get_cov.sh │ │ └── harness.go │ ├── burntsushi-toml │ │ ├── go.mod │ │ ├── go.sum │ │ ├── fuzz.sh │ │ ├── harness_test.go │ │ ├── get_cov.sh │ │ └── harness.go │ ├── caddy │ │ ├── fuzz.sh │ │ ├── harness_test.go │ │ ├── get_cov.sh │ │ ├── harness.go │ │ └── go.mod │ ├── prometheus │ │ ├── fuzz.sh │ │ ├── harness_test.go │ │ ├── get_cov.sh │ │ ├── go.mod │ │ ├── harness.go │ │ └── go.sum │ └── README.md ├── go_fuzz_build │ ├── path_constraint │ │ ├── get_cov.sh │ │ ├── go.mod │ │ ├── build.sh │ │ ├── harness_fuzz_test.go │ │ ├── fuzz.sh │ │ ├── harness.go │ │ ├── go.sum │ │ └── harness_test.go │ ├── caddy │ │ ├── get_cov.sh │ │ ├── harness_fuzz_test.go │ │ ├── build.sh │ │ ├── fuzz.sh │ │ ├── harness_test.go │ │ ├── harness.go │ │ └── go.mod │ ├── prometheus │ │ ├── get_cov.sh │ │ ├── harness_fuzz_test.go │ │ ├── build.sh │ │ ├── fuzz.sh │ │ ├── go.mod │ │ ├── harness_test.go │ │ ├── harness.go │ │ └── go.sum │ ├── burntsushi-toml │ │ ├── get_cov.sh │ │ ├── harness_fuzz.go │ │ ├── go.mod │ │ ├── build.sh │ │ ├── fuzz.sh │ │ ├── harness.go │ │ ├── go.sum │ │ └── harness_test.go │ └── README.md └── README.md ├── images └── performance.png ├── .gitignore ├── .github └── workflows │ └── rust.yml ├── Dockerfile ├── Cargo.toml ├── flake.nix ├── harness_wrappers ├── harness_test.go └── harness_fuzz.go ├── flake.lock ├── README.md ├── LICENSE ├── src └── main.rs └── Cargo.lock /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "nightly" -------------------------------------------------------------------------------- /harnesses/path_constraint/go.mod: -------------------------------------------------------------------------------- 1 | module fuzz 2 | 3 | go 1.24.1 4 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go-fuzz -procs 1 4 | -------------------------------------------------------------------------------- /images/performance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srlabs/golibafl/HEAD/images/performance.png -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go-fuzz-build -tags gofuzz 4 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/path_constraint/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.24.1 4 | -------------------------------------------------------------------------------- /harnesses/burntsushi-toml/go.mod: -------------------------------------------------------------------------------- 1 | module fuzz 2 | 3 | go 1.24.1 4 | 5 | require github.com/BurntSushi/toml v1.5.0 6 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/burntsushi-toml/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.24.1 4 | 5 | require github.com/BurntSushi/toml v1.5.0 6 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.22.2 4 | 5 | require github.com/dvyukov/go-fuzz v0.0.0-20240924070022-e577bee5275c // indirect 6 | -------------------------------------------------------------------------------- /harnesses/burntsushi-toml/go.sum: -------------------------------------------------------------------------------- 1 | github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= 2 | github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= 3 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go test -tags gocov -run=FuzzMe -cover -coverpkg=srlabs.de/harness -coverprofile cover.out 4 | go tool cover -html cover.out -o cover.html 5 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/burntsushi-toml/go.sum: -------------------------------------------------------------------------------- 1 | github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= 2 | github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= 3 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/caddy/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # loop because go-test will stop when there is a panic 4 | while true; do 5 | go test -fuzz FuzzMe -test.fuzzcachedir=./testdata/fuzz -parallel=4 6 | sleep 1 7 | done 8 | 9 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/path_constraint/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # loop because go-test will stop when there is a panic 4 | while true; do 5 | go test -fuzz FuzzMe -test.fuzzcachedir=./testdata/fuzz -parallel=1 6 | sleep 1 7 | done -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/prometheus/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # loop because go-test will stop when there is a panic 4 | while true; do 5 | go test -fuzz FuzzMe -test.fuzzcachedir=./testdata/fuzz -parallel=4 6 | sleep 1 7 | done 8 | 9 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # get caddy specific coverage 4 | go test -tags gocov -run=FuzzMe -cover -coverpkg=srlabs.de/harness -coverprofile cover.out 5 | go tool cover -html cover.out -o cover.html 6 | 7 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/burntsushi-toml/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # loop because go-test will stop when there is a panic 4 | while true; do 5 | go test -fuzz FuzzMe -test.fuzzcachedir=./testdata/fuzz -parallel=4 6 | sleep 1 7 | done 8 | 9 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/caddy/harness_test.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func FuzzMe(f *testing.F) { 8 | f.Add([]byte("1234")) 9 | f.Fuzz(func(t *testing.T, input []byte) { 10 | harness(input) 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/harness_fuzz.go: -------------------------------------------------------------------------------- 1 | //go:build gofuzz 2 | 3 | package harness 4 | 5 | func FuzzMe(input []byte) int { 6 | if harness(input) { 7 | panic("crash") 8 | //t.Fatalf("Found input: %s", input) 9 | } 10 | return 0 11 | } 12 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/prometheus/harness_test.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func FuzzMe(f *testing.F) { 8 | f.Add([]byte("1234")) 9 | f.Fuzz(func(t *testing.T, input []byte) { 10 | harness(input) 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/burntsushi-toml/harness_test.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func FuzzMe(f *testing.F) { 8 | f.Add([]byte("1234")) 9 | f.Fuzz(func(t *testing.T, input []byte) { 10 | harness(input) 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/go.sum: -------------------------------------------------------------------------------- 1 | github.com/dvyukov/go-fuzz v0.0.0-20240924070022-e577bee5275c h1:oLpHpHwNuAPvw3bBviEZNrJbigNNi5dRadfZnagGgZI= 2 | github.com/dvyukov/go-fuzz v0.0.0-20240924070022-e577bee5275c/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= 3 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/caddy/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # get caddy specific coverage 4 | go test -tags gocov -run=FuzzMe -cover -coverpkg=$(go list -deps -test| grep "github.com/caddy" | tr '\n' ',') -coverprofile cover.out 5 | go tool cover -html cover.out -o cover.html 6 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.24.1 4 | 5 | require github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 6 | 7 | require github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect 8 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # get caddy specific coverage 4 | go test -tags gocov -run=FuzzMe -cover -coverpkg=$(go list -deps -test| grep "github.com/prometheus" | tr '\n' ',') -coverprofile cover.out 5 | go tool cover -html cover.out -o cover.html 6 | 7 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # get caddy specific coverage 4 | go test -tags gocov -run=FuzzMe -cover -coverpkg=$(go list -deps -test| grep "github.com/BurntSushi" | tr '\n' ',') -coverprofile cover.out 5 | go tool cover -html cover.out -o cover.html 6 | 7 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/caddy/harness_fuzz_test.go: -------------------------------------------------------------------------------- 1 | //go:build gofuzz 2 | 3 | package harness 4 | 5 | import ( 6 | "github.com/AdamKorcz/go-118-fuzz-build/testing" 7 | ) 8 | 9 | func FuzzMe(f *testing.F) { 10 | f.Fuzz(func(t *testing.T, input []byte) { 11 | harness(input) 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/path_constraint/harness_test.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func FuzzMe(f *testing.F) { 8 | f.Add([]byte("1234")) 9 | f.Fuzz(func(t *testing.T, input []byte) { 10 | if harness(input) { 11 | t.Errorf("Found input: %s", input) 12 | } 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/harness_fuzz.go: -------------------------------------------------------------------------------- 1 | //go:build gofuzz 2 | package harness 3 | 4 | import ( 5 | "github.com/AdamKorcz/go-118-fuzz-build/testing" 6 | ) 7 | 8 | func FuzzMe(f *testing.F) { 9 | f.Add([]byte("hello")) 10 | f.Fuzz(func(t *testing.T, input []byte) { 11 | harness(input) 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/harness_fuzz_test.go: -------------------------------------------------------------------------------- 1 | //go:build gofuzz 2 | package harness 3 | 4 | import ( 5 | "github.com/AdamKorcz/go-118-fuzz-build/testing" 6 | ) 7 | 8 | func FuzzMe(f *testing.F) { 9 | f.Add([]byte("hello")) 10 | f.Fuzz(func(t *testing.T, input []byte) { 11 | harness(input) 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.24.1 4 | 5 | require ( 6 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 7 | github.com/BurntSushi/toml v1.5.0 8 | ) 9 | 10 | require github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect 11 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go-118-fuzz-build -tags gofuzz -o fuzz_archive_file.a -func FuzzMe . 4 | 5 | #clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer 6 | clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer -fsanitize=integer -fsanitize-coverage=trace-cmp -fsanitize-coverage=inline-8bit-counters 7 | 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /harness/harness.a 3 | /harness/harness.h 4 | /crashes 5 | /corpus 6 | .direnv 7 | .envrc 8 | **/output 9 | **/*output* 10 | /input 11 | /coverage 12 | **/corpus/ 13 | **/*.h 14 | **/*.a 15 | **/*.zip 16 | **/*.html 17 | **/testdata 18 | **/rawfuzzers 19 | **/*.out 20 | **/coverage 21 | **/coverprofile 22 | **/corpus* 23 | **/crashes* 24 | **/fuzz_campaign.sh 25 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/harness_fuzz_test.go: -------------------------------------------------------------------------------- 1 | //go:build gofuzz 2 | 3 | package harness 4 | 5 | import ( 6 | "github.com/AdamKorcz/go-118-fuzz-build/testing" 7 | ) 8 | 9 | func FuzzMe(f *testing.F) { 10 | f.Fuzz(func(t *testing.T, input []byte) { 11 | if harness(input) { 12 | panic("crash") 13 | //t.Fatalf("Found input: %s", input) 14 | } 15 | }) 16 | } 17 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/caddy/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go-118-fuzz-build -tags gofuzz -o fuzz_archive_file.a -func FuzzMe . 4 | 5 | #clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer 6 | # link with libfuzzer runtime 7 | #clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer -fsanitize=integer -fsanitize-coverage=trace-cmp -fsanitize-coverage=inline-8bit-counters 8 | clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer 9 | 10 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go-118-fuzz-build -tags gofuzz -o fuzz_archive_file.a -func FuzzMe . 4 | 5 | #clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer 6 | # link with libfuzzer runtime 7 | #clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer -fsanitize=integer -fsanitize-coverage=trace-cmp -fsanitize-coverage=inline-8bit-counters 8 | clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer 9 | 10 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/path_constraint/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | 4 | # when running go test without -fuzz, go will only run the harness with the 5 | # provided seed entries. Seeds are manually added in the code via 6 | # f.Add. Furthermore, go takes all seeds in testdata/fuzz/ 7 | go test -tags gocov -run=FuzzMe -cover -coverpkg=srlabs.de/harness -coverprofile cover.out 8 | 9 | go tool cover -html cover.out -o cover.html 10 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | go-118-fuzz-build -tags gofuzz -o fuzz_archive_file.a -func FuzzMe . 4 | 5 | #clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer 6 | # link with libfuzzer runtime 7 | #clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer -fsanitize=integer -fsanitize-coverage=trace-cmp -fsanitize-coverage=inline-8bit-counters 8 | clang -o fuzz_binary fuzz_archive_file.a -fsanitize=fuzzer 9 | 10 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/caddy/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # when running go test without -fuzz, go will only run the harness with the 4 | # provided seed entries. Seeds are manually added in the code via 5 | # f.Add. Furthermore, go takes all seeds in testsdata/fuzz/ 6 | go test -tags gocov -run=FuzzMe -cover -coverpkg=$(go list -deps -test| grep "github.com/caddy" | tr '\n' ',') -coverprofile cover.out 7 | 8 | go tool cover -html cover.out -o cover.html 9 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/burntsushi-toml/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # when running go test without -fuzz, go will only run the harness with the 4 | # provided seed entries. Seeds are manually added in the code via 5 | # f.Add. Furthermore, go takes all seeds in testdata/fuzz/ 6 | go test -tags gocov -run=FuzzMe -cover -coverpkg=$(go list -deps -test| grep "github.com/BurntSushi/" | tr '\n' ',') -coverprofile cover.out 7 | go tool cover -html cover.out -o cover.html 8 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/prometheus/get_cov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | 4 | # when running go test without -fuzz, go will only run the harness with the 5 | # provided seed entries. Seeds are manually added in the code via 6 | # f.Add. Furthermore, go takes all seeds in testsdata/fuzz/ 7 | go test -tags gocov -run=FuzzMe -cover -coverpkg=$(go list -deps -test| grep "github.com/prometheus" | tr '\n' ',') -coverprofile cover.out 8 | 9 | go tool cover -html cover.out -o cover.html 10 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/harness.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | func harness(data []byte) bool { 4 | cmpLogTarget := []byte("FUZZING!") 5 | 6 | if len(data) < 4+len(cmpLogTarget) { 7 | return false 8 | } 9 | 10 | if data[0] == 'F' { 11 | if data[1] == 'U' { 12 | if data[2] == 'Z' { 13 | if data[3] == 'Z' { 14 | if string(data[4:4+len(cmpLogTarget)]) == string(cmpLogTarget) { 15 | return true 16 | } 17 | } 18 | } 19 | } 20 | } 21 | 22 | return false 23 | } 24 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/caddy/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p corpus 4 | mkdir -p crashes 5 | 6 | echo "1234" > ./corpus/init 7 | # Use same flags as fuzzbench: https://github.com/google/fuzzbench/blob/2a2ca6ae4c5d171a52b3e20d9b7a72da306fe5b8/fuzzers/libfuzzer/fuzzer.py#L71-L92 8 | ./fuzz_binary ./corpus -fork=1 -ignore_crashes=1 -ignore_timeouts=1 -close_fd_mask=3 -artifact_prefix=./crashes/ -ignore_ooms=1 -entropic=1 -keep_seed=1 -cross_over_uniform_dist=1 -entropic_scale_per_exec_time=1 -detect_leaks=0 9 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p corpus 4 | mkdir -p crashes 5 | 6 | echo "1234" > ./corpus/init 7 | # Use same flags as fuzzbench: https://github.com/google/fuzzbench/blob/2a2ca6ae4c5d171a52b3e20d9b7a72da306fe5b8/fuzzers/libfuzzer/fuzzer.py#L71-L92 8 | ./fuzz_binary ./corpus -fork=1 -ignore_crashes=1 -ignore_timeouts=1 -close_fd_mask=3 -artifact_prefix=./crashes/ -ignore_ooms=1 -entropic=1 -keep_seed=1 -cross_over_uniform_dist=1 -entropic_scale_per_exec_time=1 -detect_leaks=0 9 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p corpus 4 | mkdir -p crashes 5 | echo "1234" > ./corpus/init 6 | 7 | # Use same flags as fuzzbench: https://github.com/google/fuzzbench/blob/2a2ca6ae4c5d171a52b3e20d9b7a72da306fe5b8/fuzzers/libfuzzer/fuzzer.py#L71-L92 8 | ./fuzz_binary ./corpus -fork=4 -ignore_crashes=1 -ignore_timeouts=1 -close_fd_mask=3 -artifact_prefix=./crashes/ -ignore_ooms=1 -entropic=1 -keep_seed=1 -cross_over_uniform_dist=1 -entropic_scale_per_exec_time=1 -detect_leaks=0 9 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/fuzz.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p corpus 4 | mkdir -p crashes 5 | 6 | echo "1234" > ./corpus/init 7 | # Use same flags as fuzzbench: https://github.com/google/fuzzbench/blob/2a2ca6ae4c5d171a52b3e20d9b7a72da306fe5b8/fuzzers/libfuzzer/fuzzer.py#L71-L92 8 | ./fuzz_binary ./corpus -fork=1 -ignore_crashes=1 -ignore_timeouts=1 -close_fd_mask=3 -artifact_prefix=./crashes/ -ignore_ooms=1 -entropic=1 -keep_seed=1 -cross_over_uniform_dist=1 -entropic_scale_per_exec_time=1 -detect_leaks=0 9 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/README.md: -------------------------------------------------------------------------------- 1 | # Native fuzzer 2 | 3 | ## Fuzzing 4 | To fuzz a target, navigate to its directory (e.g., `cd caddy`) and run the following commands: 5 | 6 | **Start Fuzzing** 7 | 8 | ```bash 9 | ./fuzz.sh 10 | ``` 11 | By default, `fuzz.sh` fuzzes with a single worker. To increase this, modify the `-parallel` parameter in the script. 12 | 13 | **Generate Coverage Report** 14 | 15 | ```bash 16 | ./get_cov.sh 17 | ``` 18 | The script produces a `cover.html` file in the target directory. 19 | 20 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/harness.go: -------------------------------------------------------------------------------- 1 | 2 | package harness 3 | 4 | func harness(data []byte) (bool) { 5 | cmpLogTarget := []byte("FUZZING!") 6 | 7 | if len(data) < 4+len(cmpLogTarget) { 8 | return false 9 | } 10 | 11 | if data[0] == 'F' { 12 | if data[1] == 'U' { 13 | if data[2] == 'Z' { 14 | if data[3] == 'Z' { 15 | if string(data[4:4+len(cmpLogTarget)]) == string(cmpLogTarget) { 16 | return true; 17 | } 18 | } 19 | } 20 | } 21 | } 22 | 23 | return false; 24 | } 25 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/path_constraint/harness.go: -------------------------------------------------------------------------------- 1 | 2 | package harness 3 | 4 | func harness(data []byte) (bool) { 5 | cmpLogTarget := []byte("FUZZING!") 6 | 7 | if len(data) < 4+len(cmpLogTarget) { 8 | return false 9 | } 10 | 11 | if data[0] == 'F' { 12 | if data[1] == 'U' { 13 | if data[2] == 'Z' { 14 | if data[3] == 'Z' { 15 | if string(data[4:4+len(cmpLogTarget)]) == string(cmpLogTarget) { 16 | return true; 17 | } 18 | } 19 | } 20 | } 21 | } 22 | 23 | return false; 24 | } 25 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/go.sum: -------------------------------------------------------------------------------- 1 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= 2 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= 3 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 h1:dIScnXFlF784X79oi7MzVT6GWqr/W1uUt0pB5CsDs9M= 4 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2/go.mod h1:gCLVsLfv1egrcZu+GoJATN5ts75F2s62ih/457eWzOw= 5 | -------------------------------------------------------------------------------- /harnesses/path_constraint/harness.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // The Go testing framework requires this harness function to be placed in a separate file to properly track and record code coverage metrics 4 | func harness(data []byte) { 5 | cmpLogTarget := []byte("FUZZING!") 6 | 7 | if len(data) < 4+len(cmpLogTarget) { 8 | return 9 | } 10 | 11 | if data[0] == 'F' { 12 | if data[1] == 'U' { 13 | if data[2] == 'Z' { 14 | if data[3] == 'Z' { 15 | if string(data[4:4+len(cmpLogTarget)]) == string(cmpLogTarget) { 16 | panic("FUZZFUZZING!") 17 | } 18 | } 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | env: 17 | HARNESS: ./harnesses/path_constraint 18 | 19 | steps: 20 | - uses: actions/checkout@v4 21 | - name: Install libvirt development libraries 22 | run: | 23 | rustup component add --toolchain nightly-x86_64-unknown-linux-gnu clippy 24 | - name: Build 25 | run: cargo build --verbose 26 | - name: Run clippy 27 | run: cargo clippy -- -D warnings 28 | -------------------------------------------------------------------------------- /harnesses/burntsushi-toml/harness.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "fmt" 6 | "github.com/BurntSushi/toml" 7 | ) 8 | 9 | func harness(data []byte) int { 10 | if len(data) >= 2048 { 11 | return 0 12 | } 13 | 14 | var v any 15 | _, err := toml.Decode(string(data), &v) 16 | if err != nil { 17 | return 0 18 | } 19 | 20 | buf := new(bytes.Buffer) 21 | err = toml.NewEncoder(buf).Encode(v) 22 | if err != nil { 23 | panic(fmt.Sprintf("failed to encode decoded document: %s", err)) 24 | } 25 | 26 | var v2 any 27 | _, err = toml.Decode(buf.String(), &v2) 28 | if err != nil { 29 | panic(fmt.Sprintf("failed round trip: %s", err)) 30 | } 31 | 32 | return 1 33 | } -------------------------------------------------------------------------------- /other_fuzzers/README.md: -------------------------------------------------------------------------------- 1 | # Comparative Fuzzers 2 | 3 | ## Introduction 4 | This subfolder contains several Go fuzzers that we used to benchmark and evaluate our tool's performance and capabilities. 5 | The fuzzers are: 6 | - [go_fuzz](./go_fuzz) which is based on the [go-fuzz](https://github.com/dvyukov/go-fuzz) tool. 7 | - [go_fuzz_build](./go_fuzz_build/) which is based on the [Go-118-fuzz-build](https://github.com/AdamKorcz/go-118-fuzz-build) tool 8 | - [native_fuzzing](./native_fuzzing/) which is based on the [native](https://go.dev/doc/security/fuzz/) fuzzing infrastructure of Go. 9 | 10 | ### Targets 11 | The targets for all fuzzers are the same as described [here](../harnesses/README.md). -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:24.10 2 | 3 | 4 | # Install dependencies for Go and Rust 5 | RUN apt-get update 6 | RUN apt-get install -y\ 7 | bash \ 8 | curl \ 9 | git \ 10 | gcc \ 11 | golang 12 | 13 | # Set the working directory 14 | WORKDIR /golibafl 15 | 16 | # Install Rust 17 | RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y 18 | ENV PATH="/root/.cargo/bin:${PATH}" 19 | 20 | # Copy the source code into the container 21 | COPY . . 22 | 23 | ARG HARNESS=harnesses/prometheus 24 | ENV HARNESS=$HARNESS 25 | 26 | # Compile golibafl and the harness 27 | RUN cargo build --release 28 | 29 | # Fuzz! 30 | CMD ["/golibafl/target/release/golibafl", "fuzz"] 31 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/harness.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "bytes" 5 | "fmt" 6 | "github.com/BurntSushi/toml" 7 | ) 8 | 9 | func harness(data []byte) int { 10 | if len(data) >= 2048 { 11 | return 0 12 | } 13 | 14 | var v any 15 | _, err := toml.Decode(string(data), &v) 16 | if err != nil { 17 | return 0 18 | } 19 | 20 | buf := new(bytes.Buffer) 21 | err = toml.NewEncoder(buf).Encode(v) 22 | if err != nil { 23 | panic(fmt.Sprintf("failed to encode decoded document: %s", err)) 24 | } 25 | 26 | var v2 any 27 | _, err = toml.Decode(buf.String(), &v2) 28 | if err != nil { 29 | panic(fmt.Sprintf("failed round trip: %s", err)) 30 | } 31 | 32 | return 1 33 | } -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/burntsushi-toml/harness.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "bytes" 5 | "fmt" 6 | "github.com/BurntSushi/toml" 7 | ) 8 | 9 | func harness(data []byte) int { 10 | if len(data) >= 2048 { 11 | return 0 12 | } 13 | 14 | var v any 15 | _, err := toml.Decode(string(data), &v) 16 | if err != nil { 17 | return 0 18 | } 19 | 20 | buf := new(bytes.Buffer) 21 | err = toml.NewEncoder(buf).Encode(v) 22 | if err != nil { 23 | panic(fmt.Sprintf("failed to encode decoded document: %s", err)) 24 | } 25 | 26 | var v2 any 27 | _, err = toml.Decode(buf.String(), &v2) 28 | if err != nil { 29 | panic(fmt.Sprintf("failed round trip: %s", err)) 30 | } 31 | 32 | return 1 33 | } -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/go.sum: -------------------------------------------------------------------------------- 1 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= 2 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= 3 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 h1:dIScnXFlF784X79oi7MzVT6GWqr/W1uUt0pB5CsDs9M= 4 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2/go.mod h1:gCLVsLfv1egrcZu+GoJATN5ts75F2s62ih/457eWzOw= 5 | github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= 6 | github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= 7 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "golibafl" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [profile.release] 7 | opt-level = 3 8 | codegen-units = 1 9 | lto = "fat" 10 | 11 | [build-dependencies] 12 | anyhow = "1.0.100" 13 | 14 | [dependencies] 15 | libafl = { git = "https://github.com/AFLplusplus/LibAFL", rev="67f7474a7504597aa466efbddc456ded7f90d649", features = ["prelude", "std", "derive"]} 16 | libafl_bolts = { git = "https://github.com/AFLplusplus/LibAFL", rev="67f7474a7504597aa466efbddc456ded7f90d649"} 17 | libafl_targets = { git = "https://github.com/AFLplusplus/LibAFL", rev="67f7474a7504597aa466efbddc456ded7f90d649", features = ["sancov_8bit", "observers", "libfuzzer", "sancov_cmplog", "sancov_pcguard_hitcounts"] } 18 | clap = {version = "4.5.23", features = ["derive"]} 19 | mimalloc = "0.1.43" -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "Development shell with Rust and Go"; 3 | 4 | inputs = { 5 | nixpkgs.url = "github:NixOS/nixpkgs"; 6 | flake-utils.url = "github:numtide/flake-utils"; 7 | }; 8 | 9 | outputs = { 10 | self, 11 | nixpkgs, 12 | flake-utils, 13 | }: 14 | flake-utils.lib.eachDefaultSystem ( 15 | system: let 16 | pkgs = import nixpkgs {inherit system;}; 17 | deps = with pkgs; [ 18 | (python3.withPackages (python-pkgs: [python-pkgs.requests])) 19 | go 20 | rustup 21 | cargo 22 | rustc 23 | ]; 24 | in { 25 | devShells.default = pkgs.mkShell { 26 | buildInputs = deps; 27 | shellHook = '' 28 | export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${builtins.toString (pkgs.lib.makeLibraryPath deps)}"; 29 | ''; 30 | }; 31 | } 32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/prometheus/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.24.1 4 | 5 | require ( 6 | github.com/beorn7/perks v1.0.1 // indirect 7 | github.com/cespare/xxhash/v2 v2.3.0 // indirect 8 | github.com/dennwc/varint v1.0.0 // indirect 9 | github.com/gogo/protobuf v1.3.2 // indirect 10 | github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect 11 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 12 | github.com/prometheus/client_golang v1.20.5 // indirect 13 | github.com/prometheus/client_model v0.6.1 // indirect 14 | github.com/prometheus/common v0.61.0 // indirect 15 | github.com/prometheus/procfs v0.15.1 // indirect 16 | github.com/prometheus/prometheus v0.301.0 // indirect 17 | go.uber.org/atomic v1.11.0 // indirect 18 | golang.org/x/sys v0.28.0 // indirect 19 | golang.org/x/text v0.21.0 // indirect 20 | google.golang.org/protobuf v1.36.0 // indirect 21 | ) 22 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/README.md: -------------------------------------------------------------------------------- 1 | # Go-118-fuzz-build based fuzzer 2 | 3 | ## Prerequisites 4 | To build and use this fuzzer, install the `Go-118-fuzz-build` tooling: 5 | ```bash 6 | git clone https://github.com/AdamKorcz/go-118-fuzz-build 7 | cd go-118-fuzz-build 8 | go build 9 | ``` 10 | This generates a `go-118-fuzz-build` binary. Add it to your `PATH` for the following steps to work correctly. 11 | 12 | ## Fuzzing 13 | To fuzz a target, navigate to its directory (e.g., `cd caddy`) and run the following commands: 14 | 15 | **Build the fuzzer** 16 | 17 | ```bash 18 | ./build.sh 19 | ``` 20 | 21 | **Start Fuzzing** 22 | 23 | ```bash 24 | ./fuzz.sh 25 | ``` 26 | By default, `fuzz.sh` applies the same `libFuzzer` settings as `oss-fuzz`. To customize them, modify the script. 27 | 28 | **Generate Coverage Report** 29 | 30 | ```bash 31 | ./get_cov.sh 32 | ``` 33 | The script produces a `cover.html` file in the target directory. 34 | 35 | -------------------------------------------------------------------------------- /harnesses/promql/go.mod: -------------------------------------------------------------------------------- 1 | module fuzz 2 | 3 | go 1.24.1 4 | 5 | require github.com/prometheus/prometheus v0.307.3 6 | 7 | require ( 8 | github.com/beorn7/perks v1.0.1 // indirect 9 | github.com/cespare/xxhash/v2 v2.3.0 // indirect 10 | github.com/dennwc/varint v1.0.0 // indirect 11 | github.com/gogo/protobuf v1.3.2 // indirect 12 | github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 // indirect 13 | github.com/kr/text v0.2.0 // indirect 14 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 15 | github.com/prometheus/client_golang v1.23.2 // indirect 16 | github.com/prometheus/client_model v0.6.2 // indirect 17 | github.com/prometheus/common v0.67.1 // indirect 18 | github.com/prometheus/procfs v0.16.1 // indirect 19 | go.uber.org/atomic v1.11.0 // indirect 20 | go.yaml.in/yaml/v2 v2.4.3 // indirect 21 | golang.org/x/sys v0.36.0 // indirect 22 | golang.org/x/text v0.29.0 // indirect 23 | google.golang.org/protobuf v1.36.10 // indirect 24 | ) 25 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/README.md: -------------------------------------------------------------------------------- 1 | ## Go-fuzzbased fuzzer 2 | 3 | ## Prerequisites 4 | To build and use this fuzzer, install the `Go-fuzz` tooling: 5 | ```bash 6 | go install github.com/dvyukov/go-fuzz/go-fuzz@latest github.com/dvyukov/go-fuzz/go-fuzz-build@latest 7 | ``` 8 | 9 | ## Fuzzing 10 | To fuzz a target, navigate to its directory (e.g., `cd path_constraint`) and run the following commands: 11 | 12 | **Build the fuzzer** 13 | 14 | ```bash 15 | ./build.sh 16 | ``` 17 | 18 | **Start Fuzzing** 19 | 20 | ```bash 21 | ./fuzz.sh 22 | ``` 23 | By default, `fuzz.sh` fuzzes with a single worker. To increase this, modify the `-procs` parameter in the script. 24 | 25 | **Generate Coverage Report** 26 | 27 | ```bash 28 | ./get_cov.sh 29 | ``` 30 | The script produces a `cover.html` file in the target directory. 31 | 32 | 33 | ## Note 34 | Since `go-fuzz` is deprecated and lacks support for Go 1.18+ features, only the path_constraint target is included in this directory. All other targets that we used for testing didn't compile. 35 | -------------------------------------------------------------------------------- /harness_wrappers/harness_test.go: -------------------------------------------------------------------------------- 1 | //go:build gocov 2 | 3 | package main 4 | 5 | import ( 6 | "fmt" 7 | "os" 8 | "path/filepath" 9 | 10 | "testing" 11 | ) 12 | 13 | func FuzzMe(f *testing.F) { 14 | //path := "./output/queue/" 15 | path := "REPLACE_ME" 16 | addCorpusFilesAsSeeds(f, path) 17 | f.Fuzz(func(t *testing.T, input []byte) { 18 | harness(input) 19 | }) 20 | } 21 | 22 | func addCorpusFilesAsSeeds(f *testing.F, path string) { 23 | info, err := os.Stat(path) 24 | if err != nil { 25 | fmt.Printf("Failed to access path %s: %v\n", path, err) 26 | return 27 | } 28 | if info.IsDir() { 29 | files, err := os.ReadDir(path) 30 | if err != nil { 31 | fmt.Printf("Error reading directory %s: %v\n", path, err) 32 | return 33 | } 34 | 35 | for _, file := range files { 36 | filePath := filepath.Join(path, file.Name()) 37 | addCorpusFilesAsSeeds(f, filePath) 38 | } 39 | } else { 40 | content, err := os.ReadFile(path) 41 | if err != nil { 42 | fmt.Printf("Error reading file %s: %v\n", path, err) 43 | return 44 | } 45 | f.Add(content) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.24.1 4 | 5 | require ( 6 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 7 | github.com/prometheus/prometheus v0.301.0 8 | ) 9 | 10 | require ( 11 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect 12 | github.com/beorn7/perks v1.0.1 // indirect 13 | github.com/cespare/xxhash/v2 v2.3.0 // indirect 14 | github.com/dennwc/varint v1.0.0 // indirect 15 | github.com/gogo/protobuf v1.3.2 // indirect 16 | github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect 17 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 18 | github.com/prometheus/client_golang v1.20.5 // indirect 19 | github.com/prometheus/client_model v0.6.1 // indirect 20 | github.com/prometheus/common v0.61.0 // indirect 21 | github.com/prometheus/procfs v0.15.1 // indirect 22 | go.uber.org/atomic v1.11.0 // indirect 23 | golang.org/x/sys v0.28.0 // indirect 24 | golang.org/x/text v0.21.0 // indirect 25 | google.golang.org/protobuf v1.36.0 // indirect 26 | ) 27 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz/path_constraint/harness_test.go: -------------------------------------------------------------------------------- 1 | //go:build gocov 2 | 3 | package harness 4 | 5 | import ( 6 | "fmt" 7 | "os" 8 | "path/filepath" 9 | "testing" 10 | ) 11 | 12 | func FuzzMe(f *testing.F) { 13 | path := "./corpus" 14 | addCorpusFilesAsSeeds(f, path) 15 | f.Fuzz(func(t *testing.T, input []byte) { 16 | if harness(input) { 17 | t.Fatalf("Found input: %s", input) 18 | } 19 | }) 20 | } 21 | 22 | func addCorpusFilesAsSeeds(f *testing.F, path string) { 23 | info, err := os.Stat(path) 24 | if err != nil { 25 | fmt.Printf("Failed to access path %s: %v\n", path, err) 26 | return 27 | } 28 | if info.IsDir() { 29 | files, err := os.ReadDir(path) 30 | if err != nil { 31 | fmt.Printf("Error reading directory %s: %v\n", path, err) 32 | return 33 | } 34 | 35 | for _, file := range files { 36 | filePath := filepath.Join(path, file.Name()) 37 | addCorpusFilesAsSeeds(f, filePath) 38 | } 39 | } else { 40 | content, err := os.ReadFile(path) 41 | if err != nil { 42 | fmt.Printf("Error reading file %s: %v\n", path, err) 43 | return 44 | } 45 | 46 | f.Add(content) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/prometheus/harness.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "errors" 5 | "io" 6 | "github.com/prometheus/prometheus/model/labels" 7 | "github.com/prometheus/prometheus/model/textparse" 8 | "github.com/prometheus/prometheus/promql/parser" 9 | ) 10 | 11 | var symbolTable = labels.NewSymbolTable() 12 | 13 | func fuzzParseMetricWithContentType(in []byte, contentType string) int { 14 | p, warning := textparse.New(in, contentType, "", false, false, symbolTable) 15 | if p == nil || warning != nil { 16 | // An invalid content type is being passed, which should not happen 17 | // in this context. 18 | panic(warning) 19 | } 20 | 21 | var err error 22 | for { 23 | _, err = p.Next() 24 | if err != nil { 25 | break 26 | } 27 | } 28 | if errors.Is(err, io.EOF) { 29 | err = nil 30 | } 31 | 32 | return 0 33 | } 34 | 35 | func harness(data []byte) int { 36 | if len(data) < 2 { 37 | return 0 38 | } 39 | switch data[0] { 40 | case 0x00: 41 | parser.ParseExpr(string(data[1:])) 42 | case 0x01: 43 | parser.ParseMetricSelector(string(data[1:])) 44 | case 0x02: 45 | fuzzParseMetricWithContentType(data[1:], "text/plain") 46 | case 0x03: 47 | fuzzParseMetricWithContentType(data[1:], "application/openmetrics-text") 48 | } 49 | return 0 50 | } 51 | 52 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/caddy/harness_test.go: -------------------------------------------------------------------------------- 1 | //go:build gocov 2 | 3 | package harness 4 | 5 | import ( 6 | "fmt" 7 | "os" 8 | "path/filepath" 9 | "testing" 10 | ) 11 | 12 | func FuzzMe(f *testing.F) { 13 | path := "./corpus" 14 | addCorpusFilesAsSeeds(f, path) 15 | f.Fuzz(func(t *testing.T, input []byte) { 16 | harness(input) 17 | }) 18 | } 19 | 20 | func addCorpusFilesAsSeeds(f *testing.F, path string) { 21 | info, err := os.Stat(path) 22 | if err != nil { 23 | fmt.Printf("Failed to access path %s: %v\n", path, err) 24 | return 25 | } 26 | if info.IsDir() { 27 | files, err := os.ReadDir(path) 28 | if err != nil { 29 | fmt.Printf("Error reading directory %s: %v\n", path, err) 30 | return 31 | } 32 | 33 | for _, file := range files { 34 | filePath := filepath.Join(path, file.Name()) 35 | addCorpusFilesAsSeeds(f, filePath) 36 | } 37 | } else { 38 | content, err := os.ReadFile(path) 39 | if err != nil { 40 | fmt.Printf("Error reading file %s: %v\n", path, err) 41 | return 42 | } 43 | 44 | // Go-118-fuzz-build uses go-fuzz-headers to parse the libFuzzer byte input. With this, the first 4 bytes of the input 45 | // are interpreted as length. Since we add the fuzzing byte input directly here, skip the first 4 bytes. 46 | if len(content) > 4 { 47 | f.Add(content[4:]) 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/harness_test.go: -------------------------------------------------------------------------------- 1 | //go:build gocov 2 | 3 | package harness 4 | 5 | import ( 6 | "fmt" 7 | "os" 8 | "path/filepath" 9 | "testing" 10 | ) 11 | 12 | func FuzzMe(f *testing.F) { 13 | path := "./corpus" 14 | addCorpusFilesAsSeeds(f, path) 15 | f.Fuzz(func(t *testing.T, input []byte) { 16 | harness(input) 17 | }) 18 | } 19 | 20 | func addCorpusFilesAsSeeds(f *testing.F, path string) { 21 | info, err := os.Stat(path) 22 | if err != nil { 23 | fmt.Printf("Failed to access path %s: %v\n", path, err) 24 | return 25 | } 26 | if info.IsDir() { 27 | files, err := os.ReadDir(path) 28 | if err != nil { 29 | fmt.Printf("Error reading directory %s: %v\n", path, err) 30 | return 31 | } 32 | 33 | for _, file := range files { 34 | filePath := filepath.Join(path, file.Name()) 35 | addCorpusFilesAsSeeds(f, filePath) 36 | } 37 | } else { 38 | content, err := os.ReadFile(path) 39 | if err != nil { 40 | fmt.Printf("Error reading file %s: %v\n", path, err) 41 | return 42 | } 43 | 44 | // Go-118-fuzz-build uses go-fuzz-headers to parse the libFuzzer byte input. With this, the first 4 bytes of the input 45 | // are interpreted as length. Since we add the fuzzing byte input directly here, skip the first 4 bytes. 46 | if len(content) > 4 { 47 | f.Add(content[4:]) 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/burntsushi-toml/harness_test.go: -------------------------------------------------------------------------------- 1 | //go:build gocov 2 | 3 | package harness 4 | 5 | import ( 6 | "fmt" 7 | "os" 8 | "path/filepath" 9 | "testing" 10 | ) 11 | 12 | func FuzzMe(f *testing.F) { 13 | path := "./corpus" 14 | addCorpusFilesAsSeeds(f, path) 15 | f.Fuzz(func(t *testing.T, input []byte) { 16 | harness(input) 17 | }) 18 | } 19 | 20 | func addCorpusFilesAsSeeds(f *testing.F, path string) { 21 | info, err := os.Stat(path) 22 | if err != nil { 23 | fmt.Printf("Failed to access path %s: %v\n", path, err) 24 | return 25 | } 26 | if info.IsDir() { 27 | files, err := os.ReadDir(path) 28 | if err != nil { 29 | fmt.Printf("Error reading directory %s: %v\n", path, err) 30 | return 31 | } 32 | 33 | for _, file := range files { 34 | filePath := filepath.Join(path, file.Name()) 35 | addCorpusFilesAsSeeds(f, filePath) 36 | } 37 | } else { 38 | content, err := os.ReadFile(path) 39 | if err != nil { 40 | fmt.Printf("Error reading file %s: %v\n", path, err) 41 | return 42 | } 43 | 44 | // Go-118-fuzz-build uses go-fuzz-headers to parse the libFuzzer byte input. With this, the first 4 bytes of the input 45 | // are interpreted as length. Since we add the fuzzing byte input directly here, skip the first 4 bytes. 46 | if len(content) > 4 { 47 | f.Add(content[4:]) 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/path_constraint/harness_test.go: -------------------------------------------------------------------------------- 1 | //go:build gocov 2 | 3 | package harness 4 | 5 | import ( 6 | "fmt" 7 | "os" 8 | "path/filepath" 9 | "testing" 10 | ) 11 | 12 | func FuzzMe(f *testing.F) { 13 | path := "./corpus" 14 | addCorpusFilesAsSeeds(f, path) 15 | f.Fuzz(func(t *testing.T, input []byte) { 16 | if harness(input) { 17 | t.Fatalf("Found input: %s", input) 18 | } 19 | }) 20 | } 21 | 22 | func addCorpusFilesAsSeeds(f *testing.F, path string) { 23 | info, err := os.Stat(path) 24 | if err != nil { 25 | fmt.Printf("Failed to access path %s: %v\n", path, err) 26 | return 27 | } 28 | if info.IsDir() { 29 | files, err := os.ReadDir(path) 30 | if err != nil { 31 | fmt.Printf("Error reading directory %s: %v\n", path, err) 32 | return 33 | } 34 | 35 | for _, file := range files { 36 | filePath := filepath.Join(path, file.Name()) 37 | addCorpusFilesAsSeeds(f, filePath) 38 | } 39 | } else { 40 | content, err := os.ReadFile(path) 41 | if err != nil { 42 | fmt.Printf("Error reading file %s: %v\n", path, err) 43 | return 44 | } 45 | 46 | // Go-118-fuzz-build uses go-fuzz-headers to parse the libFuzzer byte input. With this, the first 4 bytes of the input 47 | // are interpreted as length. Since we add the fuzzing byte input directly here, skip the first 4 bytes. 48 | if len(content) > 4 { 49 | f.Add(content[4:]) 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /harnesses/promql/harness.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "errors" 5 | "io" 6 | 7 | "github.com/prometheus/prometheus/model/labels" 8 | "github.com/prometheus/prometheus/model/textparse" 9 | "github.com/prometheus/prometheus/promql/parser" 10 | ) 11 | 12 | var symbolTable = labels.NewSymbolTable() 13 | 14 | func fuzzParseMetricWithContentType(in []byte, contentType string) int { 15 | p, err := textparse.New(in, contentType, symbolTable, textparse.ParserOptions{}) 16 | if err != nil { 17 | // An invalid content type is being passed, which should not happen 18 | // in this context. 19 | panic(err) 20 | } 21 | 22 | for { 23 | _, err = p.Next() 24 | if err != nil { 25 | break 26 | } 27 | } 28 | if errors.Is(err, io.EOF) { 29 | err = nil 30 | } 31 | 32 | return 0 33 | } 34 | 35 | func harness(data []byte) int { 36 | if len(data) < 2 { 37 | return 0 38 | } 39 | 40 | dataCopy := make([]byte, len(data)) 41 | copy(dataCopy, data) 42 | 43 | switch dataCopy[0] { 44 | case 0x00: 45 | parser.ParseExpr(string(dataCopy[1:])) 46 | case 0x01: 47 | parser.ParseMetricSelector(string(dataCopy[1:])) 48 | case 0x02: 49 | fuzzParseMetricWithContentType(dataCopy[1:], "text/plain") 50 | case 0x03: 51 | fuzzParseMetricWithContentType(dataCopy[1:], "application/openmetrics-text") 52 | } 53 | return 0 54 | } -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/harness.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "errors" 5 | "io" 6 | "github.com/prometheus/prometheus/model/labels" 7 | "github.com/prometheus/prometheus/model/textparse" 8 | "github.com/prometheus/prometheus/promql/parser" 9 | ) 10 | 11 | var symbolTable = labels.NewSymbolTable() 12 | 13 | func fuzzParseMetricWithContentType(in []byte, contentType string) int { 14 | p, warning := textparse.New(in, contentType, "", false, false, symbolTable) 15 | if p == nil || warning != nil { 16 | // An invalid content type is being passed, which should not happen 17 | // in this context. 18 | panic(warning) 19 | } 20 | 21 | var err error 22 | for { 23 | _, err = p.Next() 24 | if err != nil { 25 | break 26 | } 27 | } 28 | if errors.Is(err, io.EOF) { 29 | err = nil 30 | } 31 | 32 | return 0 33 | } 34 | 35 | func harness(data []byte) int { 36 | if len(data) < 2 { 37 | return 0 38 | } 39 | 40 | // need to create copy, else i get: ERROR: libFuzzer: fuzz target overwrites its const input 41 | dataCopy := make([]byte, len(data)) 42 | copy(dataCopy, data) 43 | 44 | switch dataCopy[0] { 45 | case 0x00: 46 | parser.ParseExpr(string(dataCopy[1:])) 47 | case 0x01: 48 | parser.ParseMetricSelector(string(dataCopy[1:])) 49 | case 0x02: 50 | fuzzParseMetricWithContentType(dataCopy[1:], "text/plain") 51 | case 0x03: 52 | fuzzParseMetricWithContentType(dataCopy[1:], "application/openmetrics-text") 53 | } 54 | return 0 55 | } -------------------------------------------------------------------------------- /harnesses/README.md: -------------------------------------------------------------------------------- 1 | # Harnesses 2 | 3 | ## Targets 4 | This directory contains all the targets used to test and evaluate our fuzzer. 5 | The targets include: 6 | - A custom path constraint target 7 | - [prometheus](https://github.com/prometheus/prometheus) 8 | - [caddy](https://github.com/caddyserver/caddy) 9 | - [burntsushi-toml](https://github.com/BurntSushi/toml) 10 | 11 | The fuzzed functionality for all non-custom targets was copied from the [oss-fuzz](https://github.com/google/oss-fuzz) repository. 12 | 13 | ## Concrete example: Caddy 14 | - Please run all commands from the `crate` root. 15 | 16 | **Fuzz** 17 | ```bash 18 | # will save fuzzer output in golibafl/output 19 | HARNESS=harnesses/caddy cargo run -r -- fuzz 20 | 21 | # will save fuzzer output in golibafl/harnesses/caddy/ 22 | HARNESS=harnesses/caddy cargo run -r -- fuzz -o ./harnesses/caddy 23 | ``` 24 | 25 | **Get coverage** 26 | ```bash 27 | # get coverage if fuzzer output is in golibafl/output 28 | cargo run -r -- cov -o ./output/queue -f ./harnesses/caddy 29 | 30 | # get coverage if fuzzer output is in golibafl/harnesses/caddy 31 | cargo run -r -- cov -o ./harnesses/caddy/queue -f ./harnesses/caddy 32 | ``` 33 | 34 | You can filter for `caddy` and harness specific coverage by providing the package names as coverage filter (`-c`): 35 | 36 | ```bash 37 | cargo run -r -- cov -o ./output/queue -f ./harnesses/caddy -c fuzz,caddy 38 | 39 | cargo run -r -- cov -o ./harnesses/caddy/queue -f ./harnesses/caddy -c fuzz,caddy 40 | ``` 41 | -------------------------------------------------------------------------------- /harness_wrappers/harness_fuzz.go: -------------------------------------------------------------------------------- 1 | //go:build gofuzz 2 | 3 | package main 4 | 5 | import ( 6 | "fmt" 7 | "os" 8 | "runtime/debug" 9 | "syscall" 10 | "unsafe" 11 | ) 12 | 13 | // #include 14 | import "C" 15 | 16 | //export LLVMFuzzerTestOneInput 17 | func LLVMFuzzerTestOneInput(data *C.char, size C.size_t) C.int { 18 | s := C.GoBytes(unsafe.Pointer(data), C.int(size)) 19 | defer catchPanics() 20 | harness(s) 21 | return 0 22 | } 23 | 24 | func catchPanics() { 25 | if r := recover(); r != nil { 26 | // print panic information 27 | fmt.Printf("Go panic: %v\n", r) 28 | debug.PrintStack() 29 | syscall.Kill(os.Getpid(), syscall.SIGABRT) 30 | } 31 | } 32 | 33 | //export LLVMFuzzerInitialize 34 | func LLVMFuzzerInitialize(argc *C.int, argv ***C.char) C.int { 35 | return 0 36 | } 37 | 38 | func main() { 39 | if len(os.Args) == 2 { 40 | path := os.Args[1] 41 | info, err := os.Stat(path) 42 | if err != nil { 43 | fmt.Println("Failed to access path", err) 44 | } 45 | 46 | if info.IsDir() { 47 | files, _ := os.ReadDir(path) 48 | for _, file := range files { 49 | filePath := path + string(os.PathSeparator) + file.Name() 50 | content, _ := os.ReadFile(filePath) 51 | cSize := C.size_t(len(content)) 52 | if cSize > 1 { 53 | cData := (*C.char)(unsafe.Pointer(&content[0])) 54 | LLVMFuzzerTestOneInput(cData, cSize) 55 | } 56 | } 57 | } else { 58 | content, _ := os.ReadFile(path) 59 | cSize := C.size_t(len(content)) 60 | if cSize > 1 { 61 | cData := (*C.char)(unsafe.Pointer(&content[0])) 62 | LLVMFuzzerTestOneInput(cData, cSize) 63 | } 64 | } 65 | } else { 66 | fmt.Println("Usage: ") 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "flake-utils": { 4 | "inputs": { 5 | "systems": "systems" 6 | }, 7 | "locked": { 8 | "lastModified": 1731533236, 9 | "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 10 | "owner": "numtide", 11 | "repo": "flake-utils", 12 | "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 13 | "type": "github" 14 | }, 15 | "original": { 16 | "owner": "numtide", 17 | "repo": "flake-utils", 18 | "type": "github" 19 | } 20 | }, 21 | "nixpkgs": { 22 | "locked": { 23 | "lastModified": 1744019146, 24 | "narHash": "sha256-jfciQwk9Dq9+u3hT8LnjpfnotODiL+RKkq+3aFjVe+E=", 25 | "owner": "NixOS", 26 | "repo": "nixpkgs", 27 | "rev": "328c295f764bff9358ca82ee249e597d1992d4da", 28 | "type": "github" 29 | }, 30 | "original": { 31 | "owner": "NixOS", 32 | "repo": "nixpkgs", 33 | "type": "github" 34 | } 35 | }, 36 | "root": { 37 | "inputs": { 38 | "flake-utils": "flake-utils", 39 | "nixpkgs": "nixpkgs" 40 | } 41 | }, 42 | "systems": { 43 | "locked": { 44 | "lastModified": 1681028828, 45 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 46 | "owner": "nix-systems", 47 | "repo": "default", 48 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 49 | "type": "github" 50 | }, 51 | "original": { 52 | "owner": "nix-systems", 53 | "repo": "default", 54 | "type": "github" 55 | } 56 | } 57 | }, 58 | "root": "root", 59 | "version": 7 60 | } 61 | -------------------------------------------------------------------------------- /harnesses/caddy/harness.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | 6 | "github.com/caddyserver/caddy/v2" 7 | "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" 8 | "github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile" 9 | ) 10 | 11 | func harness(data []byte) int { 12 | if len(data) < 2 { 13 | return 0 14 | } 15 | 16 | s := make([]byte, len(data)) 17 | copy(s, data) 18 | 19 | switch s[0] { 20 | case 0x00: 21 | _, err := caddy.ParseNetworkAddress(string(s[1:])) 22 | if err != nil { 23 | return 0 24 | } 25 | return 1 26 | case 0x01: 27 | caddyfile.Tokenize(s[1:], "Caddyfile") 28 | case 0x02: 29 | _, err := caddy.ParseDuration(string(s[1:])) 30 | if err != nil { 31 | return 0 32 | } 33 | return 1 34 | case 0x03: 35 | data := s[1:] 36 | caddy.NewReplacer().ReplaceAll(string(data), "") 37 | caddy.NewReplacer().ReplaceAll(caddy.NewReplacer().ReplaceAll(string(data), ""), "") 38 | caddy.NewReplacer().ReplaceAll(caddy.NewReplacer().ReplaceAll(string(data), ""), caddy.NewReplacer().ReplaceAll(string(data), "")) 39 | caddy.NewReplacer().ReplaceAll(string(data[:len(data)/2]), string(data[len(data[1:])/2:])) 40 | return 0 41 | case 0x04: 42 | formatted := caddyfile.Format(s) 43 | if bytes.Equal(formatted, caddyfile.Format(formatted)) { 44 | return 1 45 | } 46 | return 0 47 | case 0x05: 48 | addr, err := httpcaddyfile.ParseAddress(string(s[1:])) 49 | if err != nil { 50 | if addr == (httpcaddyfile.Address{}) { 51 | return 1 52 | } 53 | return 0 54 | } 55 | return 1 56 | 57 | /* 58 | todo: not exported directly but tested by oss-fuzz 59 | case 0x06: 60 | _, _, err := templates.extractFrontMatter(string(s[1:])) 61 | if err != nil { 62 | return 0 63 | } 64 | return 1 65 | */ 66 | } 67 | return 0 68 | } 69 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/caddy/harness.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "bytes" 5 | 6 | "github.com/caddyserver/caddy/v2" 7 | "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" 8 | "github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile" 9 | ) 10 | 11 | func harness(data []byte) int { 12 | if len(data) < 2 { 13 | return 0 14 | } 15 | 16 | s := make([]byte, len(data)) 17 | copy(s, data) 18 | 19 | switch s[0] { 20 | case 0x00: 21 | _, err := caddy.ParseNetworkAddress(string(s[1:])) 22 | if err != nil { 23 | return 0 24 | } 25 | return 1 26 | case 0x01: 27 | caddyfile.Tokenize(s[1:], "Caddyfile") 28 | case 0x02: 29 | _, err := caddy.ParseDuration(string(s[1:])) 30 | if err != nil { 31 | return 0 32 | } 33 | return 1 34 | case 0x03: 35 | data := s[1:] 36 | caddy.NewReplacer().ReplaceAll(string(data), "") 37 | caddy.NewReplacer().ReplaceAll(caddy.NewReplacer().ReplaceAll(string(data), ""), "") 38 | caddy.NewReplacer().ReplaceAll(caddy.NewReplacer().ReplaceAll(string(data), ""), caddy.NewReplacer().ReplaceAll(string(data), "")) 39 | caddy.NewReplacer().ReplaceAll(string(data[:len(data)/2]), string(data[len(data[1:])/2:])) 40 | return 0 41 | case 0x04: 42 | formatted := caddyfile.Format(s) 43 | if bytes.Equal(formatted, caddyfile.Format(formatted)) { 44 | return 1 45 | } 46 | return 0 47 | case 0x05: 48 | addr, err := httpcaddyfile.ParseAddress(string(s[1:])) 49 | if err != nil { 50 | if addr == (httpcaddyfile.Address{}) { 51 | return 1 52 | } 53 | return 0 54 | } 55 | return 1 56 | 57 | /* 58 | todo: not exported directly but tested by oss-fuzz 59 | case 0x06: 60 | _, _, err := templates.extractFrontMatter(string(s[1:])) 61 | if err != nil { 62 | return 0 63 | } 64 | return 1 65 | */ 66 | } 67 | return 0 68 | } 69 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/caddy/harness.go: -------------------------------------------------------------------------------- 1 | package harness 2 | 3 | import ( 4 | "bytes" 5 | 6 | "github.com/caddyserver/caddy/v2" 7 | "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" 8 | "github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile" 9 | ) 10 | 11 | func harness(data []byte) int { 12 | if len(data) < 2 { 13 | return 0 14 | } 15 | 16 | s := make([]byte, len(data)) 17 | copy(s, data) 18 | 19 | switch s[0] { 20 | case 0x00: 21 | _, err := caddy.ParseNetworkAddress(string(s[1:])) 22 | if err != nil { 23 | return 0 24 | } 25 | return 1 26 | case 0x01: 27 | caddyfile.Tokenize(s[1:], "Caddyfile") 28 | case 0x02: 29 | _, err := caddy.ParseDuration(string(s[1:])) 30 | if err != nil { 31 | return 0 32 | } 33 | return 1 34 | case 0x03: 35 | data := s[1:] 36 | caddy.NewReplacer().ReplaceAll(string(data), "") 37 | caddy.NewReplacer().ReplaceAll(caddy.NewReplacer().ReplaceAll(string(data), ""), "") 38 | caddy.NewReplacer().ReplaceAll(caddy.NewReplacer().ReplaceAll(string(data), ""), caddy.NewReplacer().ReplaceAll(string(data), "")) 39 | caddy.NewReplacer().ReplaceAll(string(data[:len(data)/2]), string(data[len(data[1:])/2:])) 40 | return 0 41 | case 0x04: 42 | formatted := caddyfile.Format(s) 43 | if bytes.Equal(formatted, caddyfile.Format(formatted)) { 44 | return 1 45 | } 46 | return 0 47 | case 0x05: 48 | addr, err := httpcaddyfile.ParseAddress(string(s[1:])) 49 | if err != nil { 50 | if addr == (httpcaddyfile.Address{}) { 51 | return 1 52 | } 53 | return 0 54 | } 55 | return 1 56 | 57 | /* 58 | todo: not exported directly but tested by oss-fuzz 59 | case 0x06: 60 | _, _, err := templates.extractFrontMatter(string(s[1:])) 61 | if err != nil { 62 | return 0 63 | } 64 | return 1 65 | */ 66 | } 67 | return 0 68 | } 69 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GoLibAFL 2 | 3 | ## Introduction 4 | This project provides a setup for fuzzing golang binaries using [LibAFL](https://github.com/AFLplusplus/LibAFL). 5 | By leveraging Go’s native libFuzzer-compatible instrumentation (`sancov_8bit`), we enable advanced fuzzing capabilities beyond Go’s built-in fuzzing support. 6 | 7 | - **In-process fuzzing** for maximum performance. 8 | - **Coverage-guided fuzzing with comparison tracing support** for guided mutation. 9 | - **Interoperability with Go** via Foreign Function Interface (FFI). 10 | 11 | ## Performance 12 | Across all our 24-hour benchmarks, GoLibAFL consistently achieved higher code coverage than existing Go fuzzing solutions. Below is the result for the [prometheus](./harnesses/prometheus/) target. 13 | 14 | 15 | 16 | ## Installation 17 | ### Requirements 18 | - Go 1.18 or later (recommended: latest version) 19 | - Rust (nightly toolchain recommended for optimizations) 20 | - Cargo and Rust toolchain installed 21 | 22 | ### Building and running a fuzzer 23 | 1. Clone the repository: 24 | ```sh 25 | git clone 26 | cd 27 | ``` 28 | 2. Define your golang harness (see [below](#defining-a-harness-in-go)) 29 | 3. Define the harness location with the environement variable `HARNESS`: 30 | ```sh 31 | export "HARNESS=harnesses/prometheus" 32 | ``` 33 | 4. Optionally, define the location of the go binary with the `GO_PATH` environment variable: 34 | ```sh 35 | export "GO_PATH=path/to/go/binary" 36 | ``` 37 | 5. Build and run the Rust-based LibAFL fuzzer: 38 | ```sh 39 | cargo run --release -- fuzz 40 | ``` 41 | 42 | or 43 | 44 | ```sh 45 | docker build --build-arg HARNESS="harnesses/prometheus" -t golibafl . 46 | docker run -v ./output:/golibafl/output golibafl 47 | ``` 48 | 49 | For an elaborate description of how to fuzz one of the example targets, refer to the [README](./harnesses/README.md) 50 | ## Usage 51 | ### Defining a harness in Go 52 | To define a harness, create a function named `harness` within the `main` package that accepts a byte slice as input: 53 | ```go 54 | package main 55 | 56 | func harness(data []byte) { 57 | } 58 | ``` 59 | 60 | Next, initialize a Go module and download its dependencies: 61 | ```sh 62 | go mod init fuzz 63 | go mod tidy 64 | ``` 65 | 66 | ### Running a specific input 67 | To execute the harness with a specific input, run: 68 | ```sh 69 | cargo run -- run -i 70 | ``` 71 | If no input path is provided, the default input directory is `./input`. 72 | 73 | ### Available options 74 | To see the available command-line options for a subcommand, use: 75 | ```sh 76 | cargo run -- fuzz --help 77 | cargo run -- run --help 78 | ``` 79 | 80 | ## Troubleshoot 81 | ### Issues on macOS 82 | #### Undefined symbols for architecture arm64 83 | While fuzzing on macOS, you might encounter issues like: 84 | 85 | ```bash 86 | = note: Undefined symbols for architecture arm64: 87 | "_CFArrayAppendValue", referenced from: 88 | _runtime.text in libharness.a[2](go.o) 89 | ``` 90 | 91 | If that is the case, update the `build.rs` and add the missing framework(s) missed within the `#[cfg(target_os = "macos")]` block, for example: 92 | 93 | ```rust 94 | println!("cargo:rustc-link-lib=framework=CoreFoundation"); 95 | println!("cargo:rustc-link-lib=framework=Security"); 96 | println!("cargo:rustc-link-lib=framework=SystemConfiguration"); 97 | println!("cargo:rustc-link-lib=dylib=resolv"); 98 | ``` 99 | 100 | You can find the missing frameworks by Googling the missing symbol. Here `_CFArrayAppendValue`is missing which is in [`CoreFoundation`](https://developer.apple.com/documentation/corefoundation/cfarrayappendvalue(_:_:)?language=objc), thus the `cargo:rustc-link-lib=framework=CoreFoundation`. 101 | 102 | 103 | ### Performance optimization 104 | - **Use Rust nightly toolchain** for optimized memory mapping. 105 | - **Upgrade Go to at least version 1.23** to avoid `cgo` stack bound performance issues. 106 | 107 | ## License 108 | This project is licensed under the Apache 2.0 License. 109 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/prometheus/go.sum: -------------------------------------------------------------------------------- 1 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 2 | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 3 | github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= 4 | github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 5 | github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= 6 | github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= 7 | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= 8 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= 9 | github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= 10 | github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= 11 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= 12 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 13 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 14 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 15 | github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= 16 | github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= 17 | github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= 18 | github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= 19 | github.com/prometheus/common v0.61.0 h1:3gv/GThfX0cV2lpO7gkTUwZru38mxevy90Bj8YFSRQQ= 20 | github.com/prometheus/common v0.61.0/go.mod h1:zr29OCN/2BsJRaFwG8QOBr41D6kkchKbpeNH7pAjb/s= 21 | github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= 22 | github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= 23 | github.com/prometheus/prometheus v0.301.0 h1:0z8dgegmILivNomCd79RKvVkIols8vBGPKmcIBc7OyY= 24 | github.com/prometheus/prometheus v0.301.0/go.mod h1:BJLjWCKNfRfjp7Q48DrAjARnCi7GhfUVvUFEAWTssZM= 25 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 26 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 27 | go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= 28 | go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= 29 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 30 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 31 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 32 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 33 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 34 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 35 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 36 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 37 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 38 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 39 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 40 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 41 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 42 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 43 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 44 | golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= 45 | golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 46 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 47 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 48 | golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= 49 | golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 50 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 51 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 52 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 53 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 54 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 55 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 56 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 57 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 58 | google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= 59 | google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 60 | -------------------------------------------------------------------------------- /other_fuzzers/native_fuzzing/caddy/go.mod: -------------------------------------------------------------------------------- 1 | module srlabs.de/harness 2 | 3 | go 1.24.1 4 | 5 | require github.com/caddyserver/caddy/v2 v2.9.1 6 | 7 | require ( 8 | dario.cat/mergo v1.0.1 // indirect 9 | filippo.io/edwards25519 v1.1.0 // indirect 10 | github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect 11 | github.com/Masterminds/goutils v1.1.1 // indirect 12 | github.com/Masterminds/semver/v3 v3.3.0 // indirect 13 | github.com/Masterminds/sprig/v3 v3.3.0 // indirect 14 | github.com/Microsoft/go-winio v0.6.0 // indirect 15 | github.com/antlr4-go/antlr/v4 v4.13.0 // indirect 16 | github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b // indirect 17 | github.com/beorn7/perks v1.0.1 // indirect 18 | github.com/caddyserver/certmagic v0.21.6 // indirect 19 | github.com/caddyserver/zerossl v0.1.3 // indirect 20 | github.com/cespare/xxhash v1.1.0 // indirect 21 | github.com/cespare/xxhash/v2 v2.3.0 // indirect 22 | github.com/chzyer/readline v1.5.1 // indirect 23 | github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect 24 | github.com/dgraph-io/badger v1.6.2 // indirect 25 | github.com/dgraph-io/badger/v2 v2.2007.4 // indirect 26 | github.com/dgraph-io/ristretto v0.1.0 // indirect 27 | github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect 28 | github.com/dustin/go-humanize v1.0.1 // indirect 29 | github.com/francoispqt/gojay v1.2.13 // indirect 30 | github.com/go-jose/go-jose/v3 v3.0.3 // indirect 31 | github.com/go-kit/kit v0.13.0 // indirect 32 | github.com/go-kit/log v0.2.1 // indirect 33 | github.com/go-logfmt/logfmt v0.6.0 // indirect 34 | github.com/go-sql-driver/mysql v1.7.1 // indirect 35 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect 36 | github.com/golang/glog v1.2.2 // indirect 37 | github.com/golang/protobuf v1.5.4 // indirect 38 | github.com/golang/snappy v0.0.4 // indirect 39 | github.com/google/cel-go v0.21.0 // indirect 40 | github.com/google/pprof v0.0.0-20231212022811-ec68065c825e // indirect 41 | github.com/google/uuid v1.6.0 // indirect 42 | github.com/huandu/xstrings v1.5.0 // indirect 43 | github.com/inconshreveable/mousetrap v1.1.0 // indirect 44 | github.com/jackc/chunkreader/v2 v2.0.1 // indirect 45 | github.com/jackc/pgconn v1.14.3 // indirect 46 | github.com/jackc/pgio v1.0.0 // indirect 47 | github.com/jackc/pgpassfile v1.0.0 // indirect 48 | github.com/jackc/pgproto3/v2 v2.3.3 // indirect 49 | github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect 50 | github.com/jackc/pgtype v1.14.0 // indirect 51 | github.com/jackc/pgx/v4 v4.18.3 // indirect 52 | github.com/klauspost/compress v1.17.11 // indirect 53 | github.com/klauspost/cpuid/v2 v2.2.9 // indirect 54 | github.com/libdns/libdns v0.2.2 // indirect 55 | github.com/manifoldco/promptui v0.9.0 // indirect 56 | github.com/mattn/go-colorable v0.1.13 // indirect 57 | github.com/mattn/go-isatty v0.0.20 // indirect 58 | github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect 59 | github.com/mholt/acmez/v3 v3.0.0 // indirect 60 | github.com/miekg/dns v1.1.62 // indirect 61 | github.com/mitchellh/copystructure v1.2.0 // indirect 62 | github.com/mitchellh/go-ps v1.0.0 // indirect 63 | github.com/mitchellh/reflectwalk v1.0.2 // indirect 64 | github.com/onsi/ginkgo/v2 v2.13.2 // indirect 65 | github.com/pkg/errors v0.9.1 // indirect 66 | github.com/prometheus/client_golang v1.19.1 // indirect 67 | github.com/prometheus/client_model v0.5.0 // indirect 68 | github.com/prometheus/common v0.48.0 // indirect 69 | github.com/prometheus/procfs v0.12.0 // indirect 70 | github.com/quic-go/qpack v0.5.1 // indirect 71 | github.com/quic-go/quic-go v0.48.2 // indirect 72 | github.com/rs/xid v1.5.0 // indirect 73 | github.com/russross/blackfriday/v2 v2.1.0 // indirect 74 | github.com/shopspring/decimal v1.4.0 // indirect 75 | github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect 76 | github.com/slackhq/nebula v1.6.1 // indirect 77 | github.com/smallstep/certificates v0.26.1 // indirect 78 | github.com/smallstep/nosql v0.6.1 // indirect 79 | github.com/smallstep/pkcs7 v0.0.0-20231024181729-3b98ecc1ca81 // indirect 80 | github.com/smallstep/scep v0.0.0-20231024192529-aee96d7ad34d // indirect 81 | github.com/smallstep/truststore v0.13.0 // indirect 82 | github.com/spf13/cast v1.7.0 // indirect 83 | github.com/spf13/cobra v1.8.1 // indirect 84 | github.com/spf13/pflag v1.0.5 // indirect 85 | github.com/stoewer/go-strcase v1.2.0 // indirect 86 | github.com/tailscale/tscert v0.0.0-20240608151842-d3f834017e53 // indirect 87 | github.com/urfave/cli v1.22.14 // indirect 88 | github.com/zeebo/blake3 v0.2.4 // indirect 89 | go.etcd.io/bbolt v1.3.9 // indirect 90 | go.step.sm/cli-utils v0.9.0 // indirect 91 | go.step.sm/crypto v0.45.0 // indirect 92 | go.step.sm/linkedca v0.20.1 // indirect 93 | go.uber.org/automaxprocs v1.6.0 // indirect 94 | go.uber.org/mock v0.4.0 // indirect 95 | go.uber.org/multierr v1.11.0 // indirect 96 | go.uber.org/zap v1.27.0 // indirect 97 | go.uber.org/zap/exp v0.3.0 // indirect 98 | golang.org/x/crypto v0.31.0 // indirect 99 | golang.org/x/crypto/x509roots/fallback v0.0.0-20241104001025-71ed71b4faf9 // indirect 100 | golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect 101 | golang.org/x/mod v0.18.0 // indirect 102 | golang.org/x/net v0.33.0 // indirect 103 | golang.org/x/sync v0.10.0 // indirect 104 | golang.org/x/sys v0.28.0 // indirect 105 | golang.org/x/term v0.27.0 // indirect 106 | golang.org/x/text v0.21.0 // indirect 107 | golang.org/x/time v0.7.0 // indirect 108 | golang.org/x/tools v0.22.0 // indirect 109 | google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect 110 | google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect 111 | google.golang.org/grpc v1.67.1 // indirect 112 | google.golang.org/protobuf v1.35.1 // indirect 113 | gopkg.in/yaml.v3 v3.0.1 // indirect 114 | howett.net/plist v1.0.0 // indirect 115 | ) 116 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/caddy/go.mod: -------------------------------------------------------------------------------- 1 | module caddy 2 | 3 | go 1.24.1 4 | 5 | require ( 6 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 7 | github.com/caddyserver/caddy/v2 v2.9.1 8 | ) 9 | 10 | require ( 11 | dario.cat/mergo v1.0.1 // indirect 12 | filippo.io/edwards25519 v1.1.0 // indirect 13 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect 14 | github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect 15 | github.com/Masterminds/goutils v1.1.1 // indirect 16 | github.com/Masterminds/semver/v3 v3.3.0 // indirect 17 | github.com/Masterminds/sprig/v3 v3.3.0 // indirect 18 | github.com/Microsoft/go-winio v0.6.0 // indirect 19 | github.com/antlr4-go/antlr/v4 v4.13.0 // indirect 20 | github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b // indirect 21 | github.com/beorn7/perks v1.0.1 // indirect 22 | github.com/caddyserver/certmagic v0.21.6 // indirect 23 | github.com/caddyserver/zerossl v0.1.3 // indirect 24 | github.com/cespare/xxhash v1.1.0 // indirect 25 | github.com/cespare/xxhash/v2 v2.3.0 // indirect 26 | github.com/chzyer/readline v1.5.1 // indirect 27 | github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect 28 | github.com/dgraph-io/badger v1.6.2 // indirect 29 | github.com/dgraph-io/badger/v2 v2.2007.4 // indirect 30 | github.com/dgraph-io/ristretto v0.1.0 // indirect 31 | github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect 32 | github.com/dustin/go-humanize v1.0.1 // indirect 33 | github.com/francoispqt/gojay v1.2.13 // indirect 34 | github.com/go-jose/go-jose/v3 v3.0.3 // indirect 35 | github.com/go-kit/kit v0.13.0 // indirect 36 | github.com/go-kit/log v0.2.1 // indirect 37 | github.com/go-logfmt/logfmt v0.6.0 // indirect 38 | github.com/go-sql-driver/mysql v1.7.1 // indirect 39 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect 40 | github.com/golang/glog v1.2.2 // indirect 41 | github.com/golang/protobuf v1.5.4 // indirect 42 | github.com/golang/snappy v0.0.4 // indirect 43 | github.com/google/cel-go v0.21.0 // indirect 44 | github.com/google/pprof v0.0.0-20231212022811-ec68065c825e // indirect 45 | github.com/google/uuid v1.6.0 // indirect 46 | github.com/huandu/xstrings v1.5.0 // indirect 47 | github.com/inconshreveable/mousetrap v1.1.0 // indirect 48 | github.com/jackc/chunkreader/v2 v2.0.1 // indirect 49 | github.com/jackc/pgconn v1.14.3 // indirect 50 | github.com/jackc/pgio v1.0.0 // indirect 51 | github.com/jackc/pgpassfile v1.0.0 // indirect 52 | github.com/jackc/pgproto3/v2 v2.3.3 // indirect 53 | github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect 54 | github.com/jackc/pgtype v1.14.0 // indirect 55 | github.com/jackc/pgx/v4 v4.18.3 // indirect 56 | github.com/klauspost/compress v1.17.11 // indirect 57 | github.com/klauspost/cpuid/v2 v2.2.9 // indirect 58 | github.com/libdns/libdns v0.2.2 // indirect 59 | github.com/manifoldco/promptui v0.9.0 // indirect 60 | github.com/mattn/go-colorable v0.1.13 // indirect 61 | github.com/mattn/go-isatty v0.0.20 // indirect 62 | github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect 63 | github.com/mholt/acmez/v3 v3.0.0 // indirect 64 | github.com/miekg/dns v1.1.62 // indirect 65 | github.com/mitchellh/copystructure v1.2.0 // indirect 66 | github.com/mitchellh/go-ps v1.0.0 // indirect 67 | github.com/mitchellh/reflectwalk v1.0.2 // indirect 68 | github.com/onsi/ginkgo/v2 v2.13.2 // indirect 69 | github.com/pkg/errors v0.9.1 // indirect 70 | github.com/prometheus/client_golang v1.19.1 // indirect 71 | github.com/prometheus/client_model v0.5.0 // indirect 72 | github.com/prometheus/common v0.48.0 // indirect 73 | github.com/prometheus/procfs v0.12.0 // indirect 74 | github.com/quic-go/qpack v0.5.1 // indirect 75 | github.com/quic-go/quic-go v0.48.2 // indirect 76 | github.com/rs/xid v1.5.0 // indirect 77 | github.com/russross/blackfriday/v2 v2.1.0 // indirect 78 | github.com/shopspring/decimal v1.4.0 // indirect 79 | github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect 80 | github.com/slackhq/nebula v1.6.1 // indirect 81 | github.com/smallstep/certificates v0.26.1 // indirect 82 | github.com/smallstep/nosql v0.6.1 // indirect 83 | github.com/smallstep/pkcs7 v0.0.0-20231024181729-3b98ecc1ca81 // indirect 84 | github.com/smallstep/scep v0.0.0-20231024192529-aee96d7ad34d // indirect 85 | github.com/smallstep/truststore v0.13.0 // indirect 86 | github.com/spf13/cast v1.7.0 // indirect 87 | github.com/spf13/cobra v1.8.1 // indirect 88 | github.com/spf13/pflag v1.0.5 // indirect 89 | github.com/stoewer/go-strcase v1.2.0 // indirect 90 | github.com/tailscale/tscert v0.0.0-20240608151842-d3f834017e53 // indirect 91 | github.com/urfave/cli v1.22.14 // indirect 92 | github.com/zeebo/blake3 v0.2.4 // indirect 93 | go.etcd.io/bbolt v1.3.9 // indirect 94 | go.step.sm/cli-utils v0.9.0 // indirect 95 | go.step.sm/crypto v0.45.0 // indirect 96 | go.step.sm/linkedca v0.20.1 // indirect 97 | go.uber.org/automaxprocs v1.6.0 // indirect 98 | go.uber.org/mock v0.4.0 // indirect 99 | go.uber.org/multierr v1.11.0 // indirect 100 | go.uber.org/zap v1.27.0 // indirect 101 | go.uber.org/zap/exp v0.3.0 // indirect 102 | golang.org/x/crypto v0.31.0 // indirect 103 | golang.org/x/crypto/x509roots/fallback v0.0.0-20241104001025-71ed71b4faf9 // indirect 104 | golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect 105 | golang.org/x/mod v0.18.0 // indirect 106 | golang.org/x/net v0.33.0 // indirect 107 | golang.org/x/sync v0.10.0 // indirect 108 | golang.org/x/sys v0.28.0 // indirect 109 | golang.org/x/term v0.27.0 // indirect 110 | golang.org/x/text v0.21.0 // indirect 111 | golang.org/x/time v0.7.0 // indirect 112 | golang.org/x/tools v0.22.0 // indirect 113 | google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect 114 | google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect 115 | google.golang.org/grpc v1.67.1 // indirect 116 | google.golang.org/protobuf v1.35.1 // indirect 117 | gopkg.in/yaml.v3 v3.0.1 // indirect 118 | howett.net/plist v1.0.0 // indirect 119 | ) 120 | -------------------------------------------------------------------------------- /harnesses/caddy/go.mod: -------------------------------------------------------------------------------- 1 | module fuzz 2 | 3 | go 1.25 4 | 5 | require github.com/caddyserver/caddy/v2 v2.10.2 6 | 7 | require ( 8 | cel.dev/expr v0.24.0 // indirect 9 | cloud.google.com/go/auth v0.16.2 // indirect 10 | cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect 11 | cloud.google.com/go/compute/metadata v0.7.0 // indirect 12 | dario.cat/mergo v1.0.1 // indirect 13 | filippo.io/edwards25519 v1.1.0 // indirect 14 | github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect 15 | github.com/KimMachineGun/automemlimit v0.7.4 // indirect 16 | github.com/Masterminds/goutils v1.1.1 // indirect 17 | github.com/Masterminds/semver/v3 v3.3.0 // indirect 18 | github.com/Masterminds/sprig/v3 v3.3.0 // indirect 19 | github.com/Microsoft/go-winio v0.6.0 // indirect 20 | github.com/antlr4-go/antlr/v4 v4.13.0 // indirect 21 | github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b // indirect 22 | github.com/beorn7/perks v1.0.1 // indirect 23 | github.com/caddyserver/certmagic v0.24.0 // indirect 24 | github.com/caddyserver/zerossl v0.1.3 // indirect 25 | github.com/ccoveille/go-safecast v1.6.1 // indirect 26 | github.com/cespare/xxhash v1.1.0 // indirect 27 | github.com/cespare/xxhash/v2 v2.3.0 // indirect 28 | github.com/chzyer/readline v1.5.1 // indirect 29 | github.com/cloudflare/circl v1.6.1 // indirect 30 | github.com/coreos/go-oidc/v3 v3.14.1 // indirect 31 | github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect 32 | github.com/dgraph-io/badger v1.6.2 // indirect 33 | github.com/dgraph-io/badger/v2 v2.2007.4 // indirect 34 | github.com/dgraph-io/ristretto v0.2.0 // indirect 35 | github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect 36 | github.com/dustin/go-humanize v1.0.1 // indirect 37 | github.com/felixge/httpsnoop v1.0.4 // indirect 38 | github.com/francoispqt/gojay v1.2.13 // indirect 39 | github.com/go-jose/go-jose/v3 v3.0.4 // indirect 40 | github.com/go-jose/go-jose/v4 v4.0.5 // indirect 41 | github.com/go-logr/logr v1.4.3 // indirect 42 | github.com/go-logr/stdr v1.2.2 // indirect 43 | github.com/go-sql-driver/mysql v1.8.1 // indirect 44 | github.com/golang/protobuf v1.5.4 // indirect 45 | github.com/golang/snappy v0.0.4 // indirect 46 | github.com/google/cel-go v0.26.0 // indirect 47 | github.com/google/s2a-go v0.1.9 // indirect 48 | github.com/google/uuid v1.6.0 // indirect 49 | github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect 50 | github.com/googleapis/gax-go/v2 v2.14.2 // indirect 51 | github.com/huandu/xstrings v1.5.0 // indirect 52 | github.com/inconshreveable/mousetrap v1.1.0 // indirect 53 | github.com/jackc/pgpassfile v1.0.0 // indirect 54 | github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect 55 | github.com/jackc/pgx/v5 v5.6.0 // indirect 56 | github.com/jackc/puddle/v2 v2.2.1 // indirect 57 | github.com/klauspost/compress v1.18.0 // indirect 58 | github.com/klauspost/cpuid/v2 v2.3.0 // indirect 59 | github.com/libdns/libdns v1.1.0 // indirect 60 | github.com/manifoldco/promptui v0.9.0 // indirect 61 | github.com/mattn/go-colorable v0.1.13 // indirect 62 | github.com/mattn/go-isatty v0.0.20 // indirect 63 | github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect 64 | github.com/mholt/acmez/v3 v3.1.2 // indirect 65 | github.com/miekg/dns v1.1.63 // indirect 66 | github.com/mitchellh/copystructure v1.2.0 // indirect 67 | github.com/mitchellh/go-ps v1.0.0 // indirect 68 | github.com/mitchellh/reflectwalk v1.0.2 // indirect 69 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect 70 | github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect 71 | github.com/pkg/errors v0.9.1 // indirect 72 | github.com/prometheus/client_golang v1.23.0 // indirect 73 | github.com/prometheus/client_model v0.6.2 // indirect 74 | github.com/prometheus/common v0.65.0 // indirect 75 | github.com/prometheus/procfs v0.16.1 // indirect 76 | github.com/quic-go/qpack v0.5.1 // indirect 77 | github.com/quic-go/quic-go v0.54.0 // indirect 78 | github.com/rs/xid v1.6.0 // indirect 79 | github.com/russross/blackfriday/v2 v2.1.0 // indirect 80 | github.com/shopspring/decimal v1.4.0 // indirect 81 | github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect 82 | github.com/slackhq/nebula v1.9.5 // indirect 83 | github.com/smallstep/certificates v0.28.4 // indirect 84 | github.com/smallstep/cli-utils v0.12.1 // indirect 85 | github.com/smallstep/linkedca v0.23.0 // indirect 86 | github.com/smallstep/nosql v0.7.0 // indirect 87 | github.com/smallstep/pkcs7 v0.2.1 // indirect 88 | github.com/smallstep/scep v0.0.0-20240926084937-8cf1ca453101 // indirect 89 | github.com/smallstep/truststore v0.13.0 // indirect 90 | github.com/spf13/cast v1.7.0 // indirect 91 | github.com/spf13/cobra v1.9.1 // indirect 92 | github.com/spf13/pflag v1.0.7 // indirect 93 | github.com/stoewer/go-strcase v1.2.0 // indirect 94 | github.com/tailscale/tscert v0.0.0-20240608151842-d3f834017e53 // indirect 95 | github.com/urfave/cli v1.22.17 // indirect 96 | github.com/zeebo/blake3 v0.2.4 // indirect 97 | go.etcd.io/bbolt v1.3.10 // indirect 98 | go.opentelemetry.io/auto/sdk v1.1.0 // indirect 99 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect 100 | go.opentelemetry.io/otel v1.37.0 // indirect 101 | go.opentelemetry.io/otel/metric v1.37.0 // indirect 102 | go.opentelemetry.io/otel/trace v1.37.0 // indirect 103 | go.step.sm/crypto v0.67.0 // indirect 104 | go.uber.org/automaxprocs v1.6.0 // indirect 105 | go.uber.org/mock v0.5.2 // indirect 106 | go.uber.org/multierr v1.11.0 // indirect 107 | go.uber.org/zap v1.27.0 // indirect 108 | go.uber.org/zap/exp v0.3.0 // indirect 109 | golang.org/x/crypto v0.40.0 // indirect 110 | golang.org/x/crypto/x509roots/fallback v0.0.0-20250305170421-49bf5b80c810 // indirect 111 | golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect 112 | golang.org/x/mod v0.25.0 // indirect 113 | golang.org/x/net v0.42.0 // indirect 114 | golang.org/x/oauth2 v0.30.0 // indirect 115 | golang.org/x/sync v0.16.0 // indirect 116 | golang.org/x/sys v0.34.0 // indirect 117 | golang.org/x/term v0.33.0 // indirect 118 | golang.org/x/text v0.27.0 // indirect 119 | golang.org/x/time v0.12.0 // indirect 120 | golang.org/x/tools v0.34.0 // indirect 121 | google.golang.org/api v0.240.0 // indirect 122 | google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect 123 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect 124 | google.golang.org/grpc v1.73.0 // indirect 125 | google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 // indirect 126 | google.golang.org/protobuf v1.36.6 // indirect 127 | gopkg.in/yaml.v3 v3.0.1 // indirect 128 | howett.net/plist v1.0.0 // indirect 129 | ) 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2025 Bruno Produit 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /other_fuzzers/go_fuzz_build/prometheus/go.sum: -------------------------------------------------------------------------------- 1 | cloud.google.com/go/auth v0.13.0 h1:8Fu8TZy167JkW8Tj3q7dIkr2v4cndv41ouecJx0PAHs= 2 | cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q= 3 | cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU= 4 | cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8= 5 | cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= 6 | cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= 7 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= 8 | github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= 9 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 h1:dIScnXFlF784X79oi7MzVT6GWqr/W1uUt0pB5CsDs9M= 10 | github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2/go.mod h1:gCLVsLfv1egrcZu+GoJATN5ts75F2s62ih/457eWzOw= 11 | github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0 h1:JZg6HRh6W6U4OLl6lk7BZ7BLisIzM9dG1R50zUk9C/M= 12 | github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0/go.mod h1:YL1xnZ6QejvQHWJrX/AvhFl4WW4rqHVoKspWNVwFk0M= 13 | github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 h1:B/dfvscEQtew9dVuoxqxrUKKv8Ih2f55PydknDamU+g= 14 | github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0/go.mod h1:fiPSssYvltE08HJchL04dOy+RD4hgrjph0cwGGMntdI= 15 | github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= 16 | github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= 17 | github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= 18 | github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= 19 | github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0= 20 | github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= 21 | github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= 22 | github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= 23 | github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= 24 | github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= 25 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 26 | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 27 | github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= 28 | github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 29 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= 30 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 31 | github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= 32 | github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= 33 | github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= 34 | github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 35 | github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= 36 | github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 37 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 38 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 39 | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= 40 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= 41 | github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= 42 | github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= 43 | github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= 44 | github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 45 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 46 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 47 | github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= 48 | github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= 49 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 50 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 51 | github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= 52 | github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= 53 | github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o= 54 | github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk= 55 | github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= 56 | github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= 57 | github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= 58 | github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= 59 | github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= 60 | github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= 61 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= 62 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 63 | github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= 64 | github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= 65 | github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= 66 | github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= 67 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 68 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 69 | github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= 70 | github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= 71 | github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= 72 | github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= 73 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= 74 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= 75 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= 76 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 77 | github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= 78 | github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= 79 | github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= 80 | github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= 81 | github.com/prometheus/common v0.61.0 h1:3gv/GThfX0cV2lpO7gkTUwZru38mxevy90Bj8YFSRQQ= 82 | github.com/prometheus/common v0.61.0/go.mod h1:zr29OCN/2BsJRaFwG8QOBr41D6kkchKbpeNH7pAjb/s= 83 | github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= 84 | github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= 85 | github.com/prometheus/prometheus v0.301.0 h1:0z8dgegmILivNomCd79RKvVkIols8vBGPKmcIBc7OyY= 86 | github.com/prometheus/prometheus v0.301.0/go.mod h1:BJLjWCKNfRfjp7Q48DrAjARnCi7GhfUVvUFEAWTssZM= 87 | github.com/prometheus/sigv4 v0.1.0 h1:FgxH+m1qf9dGQ4w8Dd6VkthmpFQfGTzUeavMoQeG1LA= 88 | github.com/prometheus/sigv4 v0.1.0/go.mod h1:doosPW9dOitMzYe2I2BN0jZqUuBrGPbXrNsTScN18iU= 89 | github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 90 | github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 91 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 92 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 93 | go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= 94 | go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= 95 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= 96 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= 97 | go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw= 98 | go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I= 99 | go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ= 100 | go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M= 101 | go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s= 102 | go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck= 103 | go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= 104 | go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= 105 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 106 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 107 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 108 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 109 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 110 | golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= 111 | golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 112 | golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA= 113 | golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= 114 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 115 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 116 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 117 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 118 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 119 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 120 | golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= 121 | golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= 122 | golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= 123 | golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= 124 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 125 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 126 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 127 | golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= 128 | golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 129 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 130 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 131 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 132 | golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= 133 | golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 134 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 135 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 136 | golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= 137 | golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 138 | golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= 139 | golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= 140 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 141 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 142 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 143 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 144 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 145 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 146 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 147 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 148 | google.golang.org/api v0.213.0 h1:KmF6KaDyFqB417T68tMPbVmmwtIXs2VB60OJKIHB0xQ= 149 | google.golang.org/api v0.213.0/go.mod h1:V0T5ZhNUUNpYAlL306gFZPFt5F5D/IeyLoktduYYnvQ= 150 | google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY= 151 | google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= 152 | google.golang.org/grpc v1.69.0 h1:quSiOM1GJPmPH5XtU+BCoVXcDVJJAzNcoyfC2cCjGkI= 153 | google.golang.org/grpc v1.69.0/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= 154 | google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= 155 | google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 156 | gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 157 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 158 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 159 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 160 | k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= 161 | k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= 162 | k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4= 163 | k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs= 164 | k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= 165 | k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= 166 | k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= 167 | k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= 168 | k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= 169 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use clap::{Parser, Subcommand}; 2 | use libafl::{ 3 | corpus::{CachedOnDiskCorpus, Corpus, OnDiskCorpus}, 4 | executors::{inprocess::InProcessExecutor, ExitKind, ShadowExecutor}, 5 | feedback_or_fast, 6 | feedbacks::{CrashFeedback, MaxMapFeedback}, 7 | fuzzer::{Fuzzer, StdFuzzer}, 8 | inputs::{BytesInput, HasTargetBytes}, 9 | mutators::scheduled::HavocScheduledMutator, 10 | nonzero, 11 | prelude::{ 12 | havoc_mutations, powersched::PowerSchedule, tokens_mutations, CalibrationStage, CanTrack, 13 | ClientDescription, EventConfig, I2SRandReplace, IndexesLenTimeMinimizerScheduler, Launcher, 14 | RandBytesGenerator, SimpleMonitor, StdMOptMutator, StdMapObserver, StdWeightedScheduler, 15 | TimeFeedback, TimeObserver, Tokens, 16 | }, 17 | stages::{mutational::StdMutationalStage, ShadowTracingStage, StdPowerMutationalStage}, 18 | state::{HasCorpus, StdState}, 19 | Error, HasMetadata, 20 | }; 21 | use libafl_bolts::{ 22 | prelude::{Cores, StdShMemProvider}, 23 | rands::StdRand, 24 | shmem::ShMemProvider, 25 | tuples::{tuple_list, Merge}, 26 | }; 27 | use libafl_targets::{ 28 | autotokens, extra_counters, libfuzzer::libfuzzer_test_one_input, libfuzzer_initialize, 29 | CmpLogObserver, COUNTERS_MAPS, 30 | }; 31 | use mimalloc::MiMalloc; 32 | use std::{ 33 | env, fs, 34 | fs::read_dir, 35 | path::{Path, PathBuf}, 36 | process::Stdio, 37 | time::Duration, 38 | }; 39 | use std::{panic, process::Command}; 40 | 41 | #[global_allocator] 42 | static GLOBAL: MiMalloc = MiMalloc; 43 | 44 | // Command line arguments with clap 45 | #[derive(Subcommand, Debug, Clone)] 46 | enum Mode { 47 | Run { 48 | #[clap(short, long, value_name = "DIR", default_value = "./input")] 49 | input: PathBuf, 50 | }, 51 | Fuzz { 52 | #[clap( 53 | short = 'j', 54 | long, 55 | value_parser = Cores::from_cmdline, 56 | help = "Spawn clients in each of the provided cores. Broker runs in the 0th core. 'all' to select all available cores. 'none' to run a client without binding to any core. eg: '1,2-4,6' selects the cores 1,2,3,4,6.", 57 | name = "CORES", 58 | default_value = "all", 59 | )] 60 | cores: Cores, 61 | 62 | #[clap( 63 | short = 'p', 64 | long, 65 | help = "Choose the broker TCP port, default is 1337", 66 | name = "PORT", 67 | default_value = "1337" 68 | )] 69 | broker_port: u16, 70 | 71 | #[clap( 72 | short, 73 | long, 74 | value_name = "DIR", 75 | default_value = "./input", 76 | help = "Initial corpus directory (will only be read)" 77 | )] 78 | input: PathBuf, 79 | 80 | #[clap( 81 | short, 82 | long, 83 | value_name = "OUTPUT", 84 | default_value = "./output", 85 | help = "Fuzzer's output directory" 86 | )] 87 | output: PathBuf, 88 | }, 89 | Cov { 90 | #[clap(short, long, value_name = "OUTPUT", help = "Fuzzer's output directory")] 91 | output: PathBuf, 92 | #[clap( 93 | short, 94 | long, 95 | value_name = "HARNESS", 96 | help = "Fuzzer's harness directory" 97 | )] 98 | fuzzer_harness: PathBuf, 99 | #[clap( 100 | short, 101 | long, 102 | value_name = "COV_PACKAGE", 103 | help = "Package name the coverage should be filtered for" 104 | )] 105 | coverage_filter: Option, 106 | }, 107 | } 108 | // Clap top level struct for args 109 | // `Parser` is needed for the top-level command-line interface 110 | #[derive(Parser, Debug, Clone)] 111 | struct Cli { 112 | #[command(subcommand)] 113 | mode: Mode, 114 | } 115 | 116 | // Run the corpus without fuzzing 117 | fn run(input: PathBuf) { 118 | let files = if input.is_dir() { 119 | input 120 | .read_dir() 121 | .expect("Unable to read dir") 122 | .filter_map(core::result::Result::ok) 123 | .map(|e| e.path()) 124 | .collect() 125 | } else { 126 | vec![input] 127 | }; 128 | 129 | // Call LLVMFuzzerInitialize() if present. 130 | let args: Vec = env::args().collect(); 131 | if unsafe { libfuzzer_initialize(&args) } == -1 { 132 | println!("Warning: LLVMFuzzerInitialize failed with -1"); 133 | } 134 | 135 | for f in &files { 136 | println!("\x1b[33mRunning: {}\x1b[0m", f.display()); 137 | let inp = 138 | std::fs::read(f).unwrap_or_else(|_| panic!("Unable to read file {}", &f.display())); 139 | if inp.len() > 1 { 140 | unsafe { 141 | libfuzzer_test_one_input(&inp); 142 | } 143 | } 144 | } 145 | } 146 | 147 | // Fuzzing function, wrapping the exported libfuzzer functions from golang 148 | #[allow(clippy::too_many_lines)] 149 | #[allow(static_mut_refs)] 150 | fn fuzz(cores: &Cores, broker_port: u16, input: &PathBuf, output: &Path) { 151 | let args: Vec = env::args().collect(); 152 | let shmem_provider = StdShMemProvider::new().expect("Failed to init shared memory"); 153 | let monitor = SimpleMonitor::new(|s| println!("{s}")); 154 | 155 | let mut run_client = 156 | |state: Option<_>, mut restarting_mgr, client_description: ClientDescription| { 157 | // trigger Go runtime initialization, which calls __sanitizer_cov_8bit_counters_init to initialize COUNTERS_MAPS 158 | if unsafe { libfuzzer_initialize(&args) } == -1 { 159 | println!("Warning: LLVMFuzzerInitialize failed with -1"); 160 | } 161 | // We assume COUNTERS_MAP len == 1 so that we can use StdMapObserver instead of Multimapobserver to improve performance. 162 | let counters_map_len = unsafe { COUNTERS_MAPS.len() }; 163 | assert!( 164 | (counters_map_len == 1), 165 | "{}", 166 | format!("Unexpected COUNTERS_MAPS length: {counters_map_len}") 167 | ); 168 | let edges = unsafe { extra_counters() }; 169 | let edges_observer = 170 | StdMapObserver::from_mut_slice("edges", edges.into_iter().next().unwrap()) 171 | .track_indices(); 172 | 173 | // Observers 174 | let time_observer = TimeObserver::new("time"); 175 | let cmplog_observer = CmpLogObserver::new("cmplog", true); 176 | let map_feedback = MaxMapFeedback::new(&edges_observer); 177 | let calibration = CalibrationStage::new(&map_feedback); 178 | 179 | let mut feedback = feedback_or_fast!( 180 | // New maximization map feedback linked to the edges observer and the feedback state 181 | map_feedback, 182 | // Time feedback, this one does not need a feedback state 183 | TimeFeedback::new(&time_observer) 184 | ); 185 | 186 | // A feedback to choose if an input is a solution or not 187 | let mut objective = feedback_or_fast!(CrashFeedback::new()); 188 | 189 | // create a State from scratch 190 | let mut state = state.unwrap_or_else(|| { 191 | StdState::new( 192 | StdRand::new(), 193 | // Corpus that will be evolved 194 | CachedOnDiskCorpus::new( 195 | format!("{}/queue/{}", output.display(), client_description.id()), 196 | 4096, 197 | ) 198 | .unwrap(), 199 | // Corpus in which we store solutions 200 | OnDiskCorpus::new(format!("{}/crashes", output.display())).unwrap(), 201 | &mut feedback, 202 | &mut objective, 203 | ) 204 | .unwrap() 205 | }); 206 | 207 | // Setup a randomic Input2State stage 208 | let i2s = StdMutationalStage::new(HavocScheduledMutator::new(tuple_list!( 209 | I2SRandReplace::new() 210 | ))); 211 | 212 | // Setup a MOPT mutator 213 | let mutator = StdMOptMutator::new( 214 | &mut state, 215 | havoc_mutations().merge(tokens_mutations()), 216 | 7, 217 | 5, 218 | )?; 219 | 220 | let power: StdPowerMutationalStage<_, _, BytesInput, _, _, _> = 221 | StdPowerMutationalStage::new(mutator); 222 | 223 | let scheduler = IndexesLenTimeMinimizerScheduler::new( 224 | &edges_observer, 225 | StdWeightedScheduler::with_schedule( 226 | &mut state, 227 | &edges_observer, 228 | Some(PowerSchedule::fast()), 229 | ), 230 | ); 231 | 232 | // A fuzzer with feedbacks and a corpus scheduler 233 | let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective); 234 | 235 | // The closure that we want to fuzz 236 | let mut harness = |input: &BytesInput| { 237 | let target = input.target_bytes(); 238 | unsafe { 239 | libfuzzer_test_one_input(&target); 240 | } 241 | ExitKind::Ok 242 | }; 243 | 244 | let executor = InProcessExecutor::with_timeout( 245 | &mut harness, 246 | tuple_list!(edges_observer, time_observer), 247 | &mut fuzzer, 248 | &mut state, 249 | &mut restarting_mgr, 250 | Duration::new(1, 0), 251 | )?; 252 | 253 | let mut executor = ShadowExecutor::new(executor, tuple_list!(cmplog_observer)); 254 | 255 | // Setup a tracing stage in which we log comparisons 256 | let tracing = ShadowTracingStage::new(); 257 | 258 | let mut stages = tuple_list!(calibration, tracing, i2s, power); 259 | 260 | if state.metadata_map().get::().is_none() { 261 | let mut toks = Tokens::default(); 262 | toks += autotokens()?; 263 | 264 | if !toks.is_empty() { 265 | state.add_metadata(toks); 266 | } 267 | } 268 | 269 | // Load corpus from input folder 270 | // In case the corpus is empty (on first run), reset 271 | if state.must_load_initial_inputs() { 272 | if read_dir(input).iter().len() == 0 { 273 | // Generator of printable bytearrays of max size 32 274 | let mut generator = RandBytesGenerator::new(nonzero!(32)); 275 | 276 | // Generate 8 initial inputs 277 | state 278 | .generate_initial_inputs( 279 | &mut fuzzer, 280 | &mut executor, 281 | &mut generator, 282 | &mut restarting_mgr, 283 | 8, 284 | ) 285 | .expect("Failed to generate the initial corpus"); 286 | println!( 287 | "We imported {} inputs from the generator.", 288 | state.corpus().count() 289 | ); 290 | } else { 291 | println!("Loading from {input:?}"); 292 | // Load from disk 293 | state 294 | .load_initial_inputs( 295 | &mut fuzzer, 296 | &mut executor, 297 | &mut restarting_mgr, 298 | &[input.to_path_buf()], 299 | ) 300 | .unwrap_or_else(|_| { 301 | panic!("Failed to load initial corpus at {input:?}"); 302 | }); 303 | println!("We imported {} inputs from disk.", state.corpus().count()); 304 | } 305 | } 306 | 307 | fuzzer.fuzz_loop(&mut stages, &mut executor, &mut state, &mut restarting_mgr)?; 308 | Ok(()) 309 | }; 310 | match Launcher::builder() 311 | .shmem_provider(shmem_provider) 312 | .configuration(EventConfig::from_name("default")) 313 | .monitor(monitor) 314 | .run_client(&mut run_client) 315 | .cores(cores) 316 | .broker_port(broker_port) 317 | .fork(false) 318 | .build() 319 | .launch() 320 | { 321 | Ok(()) => (), 322 | Err(Error::ShuttingDown) => println!("Fuzzing stopped by user. Good bye."), 323 | Err(err) => panic!("Failed to run launcher: {err:?}"), 324 | } 325 | } 326 | 327 | fn cov(output_dir: &Path, harness_dir: &Path, coverage_filter: Option) { 328 | let mut test_code = String::from(include_str!("../harness_wrappers/harness_test.go")); 329 | 330 | let output_dir = if output_dir.is_relative() { 331 | &format!( 332 | "{}/{}", 333 | env!("CARGO_MANIFEST_DIR"), 334 | output_dir.as_os_str().to_str().unwrap() 335 | ) 336 | } else { 337 | output_dir.as_os_str().to_str().unwrap() 338 | }; 339 | 340 | let harness_dir = harness_dir 341 | .as_os_str() 342 | .to_str() 343 | .expect("Harness dir not valid unicode"); 344 | 345 | test_code = test_code.replace("REPLACE_ME", output_dir); 346 | 347 | fs::write(format!("{}/harness_test.go", harness_dir), test_code) 348 | .expect("Failed to write coverage go file"); 349 | 350 | let output = Command::new("go") 351 | .args(["list", "-deps", "-test"]) 352 | .current_dir(harness_dir) 353 | .output() 354 | .expect("Failed to execute go"); 355 | 356 | let filter_terms: Vec<&str> = if let Some(coverage_filter) = coverage_filter.as_ref() { 357 | coverage_filter 358 | .split(",") 359 | .map(str::trim) 360 | .filter(|s| !s.is_empty()) 361 | .collect() 362 | } else { 363 | Vec::new() 364 | }; 365 | 366 | let deps_raw = String::from_utf8_lossy(&output.stdout); 367 | let mut packages: Vec<&str> = deps_raw 368 | .lines() 369 | .map(str::trim) 370 | .filter(|l| !l.is_empty()) 371 | .collect(); 372 | 373 | if !filter_terms.is_empty() { 374 | packages.retain(|p| filter_terms.iter().any(|t| p.contains(t))); 375 | } 376 | 377 | let status = Command::new("go") 378 | .args([ 379 | "test", 380 | "-tags=gocov", 381 | "-run=FuzzMe", 382 | "-cover", 383 | &format!("-coverpkg={}", packages.join(",")), 384 | "-coverprofile", 385 | "cover.out", 386 | ]) 387 | .current_dir(harness_dir) 388 | .stdout(Stdio::null()) 389 | .status(); 390 | 391 | fs::remove_file(format!("{}/harness_test.go", harness_dir)) 392 | .expect("Failed to remove coverage file"); 393 | 394 | // make sure we unpack status after we removed file 395 | status.expect("Failed to execute go"); 396 | 397 | Command::new("go") 398 | .args(["tool", "cover", "-html", "cover.out", "-o", "cover.html"]) 399 | .current_dir(harness_dir) 400 | .status() 401 | .expect("Failed to execute go"); 402 | 403 | println!("Coverage files succesfully created in {}", harness_dir) 404 | } 405 | 406 | // Entry point wrapping clap and calling fuzz, run or cov 407 | pub fn main() { 408 | let cli = Cli::parse(); 409 | 410 | match cli.mode { 411 | Mode::Fuzz { 412 | cores, 413 | broker_port, 414 | input, 415 | output, 416 | } => fuzz(&cores, broker_port, &input, &output), 417 | Mode::Run { input } => { 418 | run(input); 419 | } 420 | Mode::Cov { 421 | output, 422 | fuzzer_harness, 423 | coverage_filter, 424 | } => cov(&output, &fuzzer_harness, coverage_filter), 425 | } 426 | } 427 | -------------------------------------------------------------------------------- /harnesses/promql/go.sum: -------------------------------------------------------------------------------- 1 | cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= 2 | cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= 3 | cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= 4 | cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= 5 | cloud.google.com/go/compute/metadata v0.8.4 h1:oXMa1VMQBVCyewMIOm3WQsnVd9FbKBtm8reqWRaXnHQ= 6 | cloud.google.com/go/compute/metadata v0.8.4/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= 7 | github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1 h1:5YTBM8QDVIBN3sxBil89WfdAAqDZbyJTgh688DSxX5w= 8 | github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw= 9 | github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.12.0 h1:wL5IEG5zb7BVv1Kv0Xm92orq+5hB5Nipn3B5tn4Rqfk= 10 | github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.12.0/go.mod h1:J7MUC/wtRpfGVbQ5sIItY5/FuVWmvzlY21WAOfQnq/I= 11 | github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA= 12 | github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI= 13 | github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0 h1:XkkQbfMyuH2jTSjQjSoihryI8GINRcs4xp8lNawg0FI= 14 | github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= 15 | github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0= 16 | github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= 17 | github.com/aws/aws-sdk-go-v2 v1.39.2 h1:EJLg8IdbzgeD7xgvZ+I8M1e0fL0ptn/M47lianzth0I= 18 | github.com/aws/aws-sdk-go-v2 v1.39.2/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY= 19 | github.com/aws/aws-sdk-go-v2/config v1.31.12 h1:pYM1Qgy0dKZLHX2cXslNacbcEFMkDMl+Bcj5ROuS6p8= 20 | github.com/aws/aws-sdk-go-v2/config v1.31.12/go.mod h1:/MM0dyD7KSDPR+39p9ZNVKaHDLb9qnfDurvVS2KAhN8= 21 | github.com/aws/aws-sdk-go-v2/credentials v1.18.16 h1:4JHirI4zp958zC026Sm+V4pSDwW4pwLefKrc0bF2lwI= 22 | github.com/aws/aws-sdk-go-v2/credentials v1.18.16/go.mod h1:qQMtGx9OSw7ty1yLclzLxXCRbrkjWAM7JnObZjmCB7I= 23 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 h1:Mv4Bc0mWmv6oDuSWTKnk+wgeqPL5DRFu5bQL9BGPQ8Y= 24 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9/go.mod h1:IKlKfRppK2a1y0gy1yH6zD+yX5uplJ6UuPlgd48dJiQ= 25 | github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 h1:se2vOWGD3dWQUtfn4wEjRQJb1HK1XsNIt825gskZ970= 26 | github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9/go.mod h1:hijCGH2VfbZQxqCDN7bwz/4dzxV+hkyhjawAtdPWKZA= 27 | github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 h1:6RBnKZLkJM4hQ+kN6E7yWFveOTg8NLPHAkqrs4ZPlTU= 28 | github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9/go.mod h1:V9rQKRmK7AWuEsOMnHzKj8WyrIir1yUJbZxDuZLFvXI= 29 | github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= 30 | github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= 31 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 h1:oegbebPEMA/1Jny7kvwejowCaHz1FWZAQ94WXFNCyTM= 32 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1/go.mod h1:kemo5Myr9ac0U9JfSjMo9yHLtw+pECEHsFtJ9tqCEI8= 33 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 h1:5r34CgVOD4WZudeEKZ9/iKpiT6cM1JyEROpXjOcdWv8= 34 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9/go.mod h1:dB12CEbNWPbzO2uC6QSWHteqOg4JfBVJOojbAoAUb5I= 35 | github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 h1:A1oRkiSQOWstGh61y4Wc/yQ04sqrQZr1Si/oAXj20/s= 36 | github.com/aws/aws-sdk-go-v2/service/sso v1.29.6/go.mod h1:5PfYspyCU5Vw1wNPsxi15LZovOnULudOQuVxphSflQA= 37 | github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 h1:5fm5RTONng73/QA73LhCNR7UT9RpFH3hR6HWL6bIgVY= 38 | github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1/go.mod h1:xBEjWD13h+6nq+z4AkqSfSvqRKFgDIQeaMguAJndOWo= 39 | github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 h1:p3jIvqYwUZgu/XYeI48bJxOhvm47hZb5HUQ0tn6Q9kA= 40 | github.com/aws/aws-sdk-go-v2/service/sts v1.38.6/go.mod h1:WtKK+ppze5yKPkZ0XwqIVWD4beCwv056ZbPQNoeHqM8= 41 | github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE= 42 | github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= 43 | github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= 44 | github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= 45 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 46 | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 47 | github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= 48 | github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 49 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 50 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= 51 | github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 52 | github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= 53 | github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= 54 | github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= 55 | github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 56 | github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= 57 | github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 58 | github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= 59 | github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 60 | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= 61 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= 62 | github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= 63 | github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= 64 | github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= 65 | github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 66 | github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= 67 | github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= 68 | github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= 69 | github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= 70 | github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 71 | github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 72 | github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= 73 | github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= 74 | github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= 75 | github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= 76 | github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 h1:cLN4IBkmkYZNnk7EAJ0BHIethd+J6LqxFNw5mSiI2bM= 77 | github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= 78 | github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= 79 | github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= 80 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= 81 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 82 | github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= 83 | github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= 84 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 85 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 86 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= 87 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 88 | github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= 89 | github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= 90 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 91 | github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 92 | github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= 93 | github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= 94 | github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= 95 | github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s= 96 | github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= 97 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= 98 | github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= 99 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= 100 | github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 101 | github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= 102 | github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= 103 | github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= 104 | github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= 105 | github.com/prometheus/common v0.67.1 h1:OTSON1P4DNxzTg4hmKCc37o4ZAZDv0cfXLkOt0oEowI= 106 | github.com/prometheus/common v0.67.1/go.mod h1:RpmT9v35q2Y+lsieQsdOh5sXZ6ajUGC8NjZAmr8vb0Q= 107 | github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos= 108 | github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM= 109 | github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= 110 | github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= 111 | github.com/prometheus/prometheus v0.307.3 h1:zGIN3EpiKacbMatcUL2i6wC26eRWXdoXfNPjoBc2l34= 112 | github.com/prometheus/prometheus v0.307.3/go.mod h1:sPbNW+KTS7WmzFIafC3Inzb6oZVaGLnSvwqTdz2jxRQ= 113 | github.com/prometheus/sigv4 v0.2.1 h1:hl8D3+QEzU9rRmbKIRwMKRwaFGyLkbPdH5ZerglRHY0= 114 | github.com/prometheus/sigv4 v0.2.1/go.mod h1:ySk6TahIlsR2sxADuHy4IBFhwEjRGGsfbbLGhFYFj6Q= 115 | github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= 116 | github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= 117 | github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= 118 | github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 119 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 120 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 121 | go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= 122 | go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= 123 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= 124 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= 125 | go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= 126 | go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= 127 | go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= 128 | go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= 129 | go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= 130 | go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= 131 | go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= 132 | go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= 133 | go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 134 | go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 135 | go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= 136 | go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= 137 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 138 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 139 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 140 | golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= 141 | golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= 142 | golang.org/x/exp v0.0.0-20250808145144-a408d31f581a h1:Y+7uR/b1Mw2iSXZ3G//1haIiSElDQZ8KWh0h+sZPG90= 143 | golang.org/x/exp v0.0.0-20250808145144-a408d31f581a/go.mod h1:rT6SFzZ7oxADUDx58pcaKFTcZ+inxAa9fTrYx/uVYwg= 144 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 145 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 146 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 147 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 148 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 149 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 150 | golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= 151 | golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= 152 | golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo= 153 | golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= 154 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 155 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 156 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 157 | golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= 158 | golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= 159 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 160 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 161 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 162 | golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= 163 | golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 164 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 165 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 166 | golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= 167 | golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= 168 | golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI= 169 | golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= 170 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 171 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 172 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 173 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 174 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 175 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 176 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 177 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 178 | google.golang.org/api v0.250.0 h1:qvkwrf/raASj82UegU2RSDGWi/89WkLckn4LuO4lVXM= 179 | google.golang.org/api v0.250.0/go.mod h1:Y9Uup8bDLJJtMzJyQnu+rLRJLA0wn+wTtc6vTlOvfXo= 180 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M= 181 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= 182 | google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= 183 | google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 184 | google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= 185 | google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= 186 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 187 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 188 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 189 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 190 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 191 | k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= 192 | k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= 193 | k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= 194 | k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= 195 | k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= 196 | k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= 197 | k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= 198 | k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= 199 | k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= 200 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "ahash" 22 | version = "0.8.12" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" 25 | dependencies = [ 26 | "cfg-if", 27 | "once_cell", 28 | "version_check", 29 | "zerocopy", 30 | ] 31 | 32 | [[package]] 33 | name = "aho-corasick" 34 | version = "1.1.3" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 37 | dependencies = [ 38 | "memchr", 39 | ] 40 | 41 | [[package]] 42 | name = "allocator-api2" 43 | version = "0.2.18" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" 46 | 47 | [[package]] 48 | name = "anstream" 49 | version = "0.6.18" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 52 | dependencies = [ 53 | "anstyle", 54 | "anstyle-parse", 55 | "anstyle-query", 56 | "anstyle-wincon", 57 | "colorchoice", 58 | "is_terminal_polyfill", 59 | "utf8parse", 60 | ] 61 | 62 | [[package]] 63 | name = "anstyle" 64 | version = "1.0.10" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 67 | 68 | [[package]] 69 | name = "anstyle-parse" 70 | version = "0.2.6" 71 | source = "registry+https://github.com/rust-lang/crates.io-index" 72 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 73 | dependencies = [ 74 | "utf8parse", 75 | ] 76 | 77 | [[package]] 78 | name = "anstyle-query" 79 | version = "1.1.2" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 82 | dependencies = [ 83 | "windows-sys", 84 | ] 85 | 86 | [[package]] 87 | name = "anstyle-wincon" 88 | version = "3.0.6" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" 91 | dependencies = [ 92 | "anstyle", 93 | "windows-sys", 94 | ] 95 | 96 | [[package]] 97 | name = "anyhow" 98 | version = "1.0.100" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 101 | 102 | [[package]] 103 | name = "arbitrary-int" 104 | version = "1.3.0" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "825297538d77367557b912770ca3083f778a196054b3ee63b22673c4a3cae0a5" 107 | 108 | [[package]] 109 | name = "arbitrary-int" 110 | version = "2.0.0" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "c858caffa49edfc4ecc45a4bec37abd3e88041a2903816f10f990b7b41abc281" 113 | 114 | [[package]] 115 | name = "autocfg" 116 | version = "1.4.0" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 119 | 120 | [[package]] 121 | name = "backtrace" 122 | version = "0.3.74" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 125 | dependencies = [ 126 | "addr2line", 127 | "cfg-if", 128 | "libc", 129 | "miniz_oxide", 130 | "object", 131 | "rustc-demangle", 132 | "windows-targets", 133 | ] 134 | 135 | [[package]] 136 | name = "bincode" 137 | version = "2.0.1" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" 140 | dependencies = [ 141 | "bincode_derive", 142 | "serde", 143 | "unty", 144 | ] 145 | 146 | [[package]] 147 | name = "bincode_derive" 148 | version = "2.0.1" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09" 151 | dependencies = [ 152 | "virtue", 153 | ] 154 | 155 | [[package]] 156 | name = "bindgen" 157 | version = "0.72.1" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" 160 | dependencies = [ 161 | "bitflags", 162 | "cexpr", 163 | "clang-sys", 164 | "itertools", 165 | "log", 166 | "prettyplease", 167 | "proc-macro2", 168 | "quote", 169 | "regex", 170 | "rustc-hash", 171 | "shlex", 172 | "syn", 173 | ] 174 | 175 | [[package]] 176 | name = "bitbybit" 177 | version = "1.4.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "ec187a89ab07e209270175faf9e07ceb2755d984954e58a2296e325ddece2762" 180 | dependencies = [ 181 | "arbitrary-int 1.3.0", 182 | "proc-macro2", 183 | "quote", 184 | "syn", 185 | ] 186 | 187 | [[package]] 188 | name = "bitflags" 189 | version = "2.6.0" 190 | source = "registry+https://github.com/rust-lang/crates.io-index" 191 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 192 | 193 | [[package]] 194 | name = "build_id2" 195 | version = "0.16.0" 196 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 197 | dependencies = [ 198 | "ahash", 199 | "rustversion", 200 | "uuid", 201 | ] 202 | 203 | [[package]] 204 | name = "bumpalo" 205 | version = "3.19.1" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" 208 | 209 | [[package]] 210 | name = "bytemuck" 211 | version = "1.24.0" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 214 | 215 | [[package]] 216 | name = "cc" 217 | version = "1.2.49" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" 220 | dependencies = [ 221 | "find-msvc-tools", 222 | "jobserver", 223 | "libc", 224 | "shlex", 225 | ] 226 | 227 | [[package]] 228 | name = "cexpr" 229 | version = "0.6.0" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 232 | dependencies = [ 233 | "nom", 234 | ] 235 | 236 | [[package]] 237 | name = "cfg-if" 238 | version = "1.0.0" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 241 | 242 | [[package]] 243 | name = "cfg_aliases" 244 | version = "0.2.1" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 247 | 248 | [[package]] 249 | name = "clang-sys" 250 | version = "1.8.1" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 253 | dependencies = [ 254 | "glob", 255 | "libc", 256 | "libloading", 257 | ] 258 | 259 | [[package]] 260 | name = "clap" 261 | version = "4.5.23" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" 264 | dependencies = [ 265 | "clap_builder", 266 | "clap_derive", 267 | ] 268 | 269 | [[package]] 270 | name = "clap_builder" 271 | version = "4.5.23" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" 274 | dependencies = [ 275 | "anstream", 276 | "anstyle", 277 | "clap_lex", 278 | "strsim", 279 | ] 280 | 281 | [[package]] 282 | name = "clap_derive" 283 | version = "4.5.18" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" 286 | dependencies = [ 287 | "heck", 288 | "proc-macro2", 289 | "quote", 290 | "syn", 291 | ] 292 | 293 | [[package]] 294 | name = "clap_lex" 295 | version = "0.7.4" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 298 | 299 | [[package]] 300 | name = "cobs" 301 | version = "0.3.0" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" 304 | dependencies = [ 305 | "thiserror", 306 | ] 307 | 308 | [[package]] 309 | name = "colorchoice" 310 | version = "1.0.3" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 313 | 314 | [[package]] 315 | name = "const_format" 316 | version = "0.2.33" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" 319 | dependencies = [ 320 | "const_format_proc_macros", 321 | ] 322 | 323 | [[package]] 324 | name = "const_format_proc_macros" 325 | version = "0.2.33" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" 328 | dependencies = [ 329 | "proc-macro2", 330 | "quote", 331 | "unicode-xid", 332 | ] 333 | 334 | [[package]] 335 | name = "const_panic" 336 | version = "0.2.10" 337 | source = "registry+https://github.com/rust-lang/crates.io-index" 338 | checksum = "013b6c2c3a14d678f38cd23994b02da3a1a1b6a5d1eedddfe63a5a5f11b13a81" 339 | 340 | [[package]] 341 | name = "core_affinity2" 342 | version = "0.16.0" 343 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 344 | dependencies = [ 345 | "libafl_core", 346 | "libc", 347 | "rustversion", 348 | "serde", 349 | "windows", 350 | ] 351 | 352 | [[package]] 353 | name = "ctor" 354 | version = "0.6.3" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "424e0138278faeb2b401f174ad17e715c829512d74f3d1e81eb43365c2e0590e" 357 | dependencies = [ 358 | "ctor-proc-macro", 359 | "dtor", 360 | ] 361 | 362 | [[package]] 363 | name = "ctor-proc-macro" 364 | version = "0.0.7" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" 367 | 368 | [[package]] 369 | name = "dtor" 370 | version = "0.1.1" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "404d02eeb088a82cfd873006cb713fe411306c7d182c344905e101fb1167d301" 373 | dependencies = [ 374 | "dtor-proc-macro", 375 | ] 376 | 377 | [[package]] 378 | name = "dtor-proc-macro" 379 | version = "0.0.6" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" 382 | 383 | [[package]] 384 | name = "either" 385 | version = "1.13.0" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 388 | 389 | [[package]] 390 | name = "embedded-io" 391 | version = "0.4.0" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" 394 | 395 | [[package]] 396 | name = "embedded-io" 397 | version = "0.6.1" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" 400 | 401 | [[package]] 402 | name = "equivalent" 403 | version = "1.0.2" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 406 | 407 | [[package]] 408 | name = "erased-serde" 409 | version = "0.4.5" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" 412 | dependencies = [ 413 | "serde", 414 | "typeid", 415 | ] 416 | 417 | [[package]] 418 | name = "exceptional" 419 | version = "0.16.0" 420 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 421 | dependencies = [ 422 | "libafl_core", 423 | "libc", 424 | "log", 425 | "nix", 426 | "num_enum", 427 | "rustversion", 428 | "windows", 429 | "windows-core", 430 | ] 431 | 432 | [[package]] 433 | name = "fast_rands" 434 | version = "0.16.0" 435 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 436 | dependencies = [ 437 | "rand_core", 438 | "rustversion", 439 | "serde", 440 | ] 441 | 442 | [[package]] 443 | name = "fastbloom" 444 | version = "0.14.0" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "18c1ddb9231d8554c2d6bdf4cfaabf0c59251658c68b6c95cd52dd0c513a912a" 447 | dependencies = [ 448 | "getrandom", 449 | "libm", 450 | "siphasher", 451 | ] 452 | 453 | [[package]] 454 | name = "find-msvc-tools" 455 | version = "0.1.5" 456 | source = "registry+https://github.com/rust-lang/crates.io-index" 457 | checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" 458 | 459 | [[package]] 460 | name = "foldhash" 461 | version = "0.2.0" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 464 | 465 | [[package]] 466 | name = "fs2" 467 | version = "0.4.3" 468 | source = "registry+https://github.com/rust-lang/crates.io-index" 469 | checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" 470 | dependencies = [ 471 | "libc", 472 | "winapi", 473 | ] 474 | 475 | [[package]] 476 | name = "getrandom" 477 | version = "0.3.2" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" 480 | dependencies = [ 481 | "cfg-if", 482 | "libc", 483 | "r-efi", 484 | "wasi", 485 | ] 486 | 487 | [[package]] 488 | name = "gimli" 489 | version = "0.31.1" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 492 | 493 | [[package]] 494 | name = "glob" 495 | version = "0.3.1" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 498 | 499 | [[package]] 500 | name = "golibafl" 501 | version = "0.1.0" 502 | dependencies = [ 503 | "anyhow", 504 | "clap", 505 | "libafl", 506 | "libafl_bolts", 507 | "libafl_targets", 508 | "mimalloc", 509 | ] 510 | 511 | [[package]] 512 | name = "hashbrown" 513 | version = "0.16.1" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 516 | dependencies = [ 517 | "allocator-api2", 518 | "equivalent", 519 | "foldhash", 520 | "serde", 521 | "serde_core", 522 | ] 523 | 524 | [[package]] 525 | name = "heck" 526 | version = "0.5.0" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 529 | 530 | [[package]] 531 | name = "hostname" 532 | version = "0.4.2" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" 535 | dependencies = [ 536 | "cfg-if", 537 | "libc", 538 | "windows-link", 539 | ] 540 | 541 | [[package]] 542 | name = "is_terminal_polyfill" 543 | version = "1.70.1" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 546 | 547 | [[package]] 548 | name = "itertools" 549 | version = "0.13.0" 550 | source = "registry+https://github.com/rust-lang/crates.io-index" 551 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 552 | dependencies = [ 553 | "either", 554 | ] 555 | 556 | [[package]] 557 | name = "itoa" 558 | version = "1.0.11" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 561 | 562 | [[package]] 563 | name = "jobserver" 564 | version = "0.1.32" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 567 | dependencies = [ 568 | "libc", 569 | ] 570 | 571 | [[package]] 572 | name = "js-sys" 573 | version = "0.3.83" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" 576 | dependencies = [ 577 | "once_cell", 578 | "wasm-bindgen", 579 | ] 580 | 581 | [[package]] 582 | name = "libafl" 583 | version = "0.16.0" 584 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 585 | dependencies = [ 586 | "ahash", 587 | "arbitrary-int 2.0.0", 588 | "backtrace", 589 | "bincode", 590 | "bitbybit", 591 | "const_format", 592 | "const_panic", 593 | "fastbloom", 594 | "fs2", 595 | "hashbrown", 596 | "libafl_bolts", 597 | "libafl_core", 598 | "libafl_derive", 599 | "libc", 600 | "libm", 601 | "ll_mp", 602 | "log", 603 | "meminterval", 604 | "nix", 605 | "no_std_time", 606 | "num-traits", 607 | "postcard", 608 | "regex", 609 | "rustversion", 610 | "serde", 611 | "serde_json", 612 | "serial_test", 613 | "tuple_list", 614 | "tuple_list_ex", 615 | "typed-builder", 616 | "uuid", 617 | "wait-timeout", 618 | "winapi", 619 | "windows", 620 | ] 621 | 622 | [[package]] 623 | name = "libafl_bolts" 624 | version = "0.16.0" 625 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 626 | dependencies = [ 627 | "ahash", 628 | "backtrace", 629 | "build_id2", 630 | "core_affinity2", 631 | "erased-serde", 632 | "exceptional", 633 | "fast_rands", 634 | "hashbrown", 635 | "hostname", 636 | "libafl_core", 637 | "libafl_derive", 638 | "libc", 639 | "ll_mp", 640 | "log", 641 | "mach2", 642 | "minibsod", 643 | "miniz_oxide", 644 | "nix", 645 | "no_std_time", 646 | "num_enum", 647 | "ownedref", 648 | "postcard", 649 | "rustversion", 650 | "serde", 651 | "serde_anymap", 652 | "serial_test", 653 | "shmem_providers", 654 | "static_assertions", 655 | "tuple_list", 656 | "tuple_list_ex", 657 | "typeid", 658 | "uds", 659 | "wide", 660 | "winapi", 661 | "windows", 662 | "windows-result", 663 | "xxhash-rust", 664 | ] 665 | 666 | [[package]] 667 | name = "libafl_core" 668 | version = "0.16.0" 669 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 670 | dependencies = [ 671 | "backtrace", 672 | "nix", 673 | "postcard", 674 | "rustversion", 675 | "serde", 676 | "windows-result", 677 | ] 678 | 679 | [[package]] 680 | name = "libafl_derive" 681 | version = "0.16.0" 682 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 683 | dependencies = [ 684 | "proc-macro2", 685 | "quote", 686 | "syn", 687 | ] 688 | 689 | [[package]] 690 | name = "libafl_targets" 691 | version = "0.16.0" 692 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 693 | dependencies = [ 694 | "bindgen", 695 | "cc", 696 | "fast_rands", 697 | "hashbrown", 698 | "libafl", 699 | "libafl_bolts", 700 | "libafl_core", 701 | "libc", 702 | "log", 703 | "meminterval", 704 | "nix", 705 | "ownedref", 706 | "rangemap", 707 | "rustversion", 708 | "serde", 709 | "shmem_providers", 710 | ] 711 | 712 | [[package]] 713 | name = "libc" 714 | version = "0.2.178" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" 717 | 718 | [[package]] 719 | name = "libloading" 720 | version = "0.8.5" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" 723 | dependencies = [ 724 | "cfg-if", 725 | "windows-targets", 726 | ] 727 | 728 | [[package]] 729 | name = "libm" 730 | version = "0.2.11" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" 733 | 734 | [[package]] 735 | name = "libmimalloc-sys" 736 | version = "0.1.39" 737 | source = "registry+https://github.com/rust-lang/crates.io-index" 738 | checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" 739 | dependencies = [ 740 | "cc", 741 | "libc", 742 | ] 743 | 744 | [[package]] 745 | name = "ll_mp" 746 | version = "0.16.0" 747 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 748 | dependencies = [ 749 | "exceptional", 750 | "hostname", 751 | "libafl_core", 752 | "log", 753 | "miniz_oxide", 754 | "nix", 755 | "no_std_time", 756 | "postcard", 757 | "rustversion", 758 | "serde", 759 | "serial_test", 760 | "shmem_providers", 761 | "tuple_list", 762 | ] 763 | 764 | [[package]] 765 | name = "lock_api" 766 | version = "0.4.12" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 769 | dependencies = [ 770 | "autocfg", 771 | "scopeguard", 772 | ] 773 | 774 | [[package]] 775 | name = "log" 776 | version = "0.4.29" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 779 | 780 | [[package]] 781 | name = "mach2" 782 | version = "0.6.0" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b" 785 | 786 | [[package]] 787 | name = "memchr" 788 | version = "2.7.4" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 791 | 792 | [[package]] 793 | name = "meminterval" 794 | version = "0.4.2" 795 | source = "registry+https://github.com/rust-lang/crates.io-index" 796 | checksum = "8e0f9a537564310a87dc77d5c88a407e27dd0aa740e070f0549439cfcc68fcfd" 797 | dependencies = [ 798 | "num-traits", 799 | "serde", 800 | ] 801 | 802 | [[package]] 803 | name = "memoffset" 804 | version = "0.9.1" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 807 | dependencies = [ 808 | "autocfg", 809 | ] 810 | 811 | [[package]] 812 | name = "mimalloc" 813 | version = "0.1.43" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" 816 | dependencies = [ 817 | "libmimalloc-sys", 818 | ] 819 | 820 | [[package]] 821 | name = "minibsod" 822 | version = "0.16.0" 823 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 824 | dependencies = [ 825 | "exceptional", 826 | "libc", 827 | "mach2", 828 | "rustversion", 829 | "windows", 830 | ] 831 | 832 | [[package]] 833 | name = "minimal-lexical" 834 | version = "0.2.1" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 837 | 838 | [[package]] 839 | name = "miniz_oxide" 840 | version = "0.8.0" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 843 | dependencies = [ 844 | "adler2", 845 | ] 846 | 847 | [[package]] 848 | name = "nix" 849 | version = "0.30.1" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 852 | dependencies = [ 853 | "bitflags", 854 | "cfg-if", 855 | "cfg_aliases", 856 | "libc", 857 | "memoffset", 858 | ] 859 | 860 | [[package]] 861 | name = "no_std_time" 862 | version = "0.16.0" 863 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 864 | dependencies = [ 865 | "rustversion", 866 | ] 867 | 868 | [[package]] 869 | name = "nom" 870 | version = "7.1.3" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 873 | dependencies = [ 874 | "memchr", 875 | "minimal-lexical", 876 | ] 877 | 878 | [[package]] 879 | name = "num-traits" 880 | version = "0.2.19" 881 | source = "registry+https://github.com/rust-lang/crates.io-index" 882 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 883 | dependencies = [ 884 | "autocfg", 885 | ] 886 | 887 | [[package]] 888 | name = "num_enum" 889 | version = "0.7.5" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" 892 | dependencies = [ 893 | "num_enum_derive", 894 | "rustversion", 895 | ] 896 | 897 | [[package]] 898 | name = "num_enum_derive" 899 | version = "0.7.5" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" 902 | dependencies = [ 903 | "proc-macro2", 904 | "quote", 905 | "syn", 906 | ] 907 | 908 | [[package]] 909 | name = "object" 910 | version = "0.36.5" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 913 | dependencies = [ 914 | "memchr", 915 | ] 916 | 917 | [[package]] 918 | name = "once_cell" 919 | version = "1.20.2" 920 | source = "registry+https://github.com/rust-lang/crates.io-index" 921 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 922 | 923 | [[package]] 924 | name = "ownedref" 925 | version = "0.16.0" 926 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 927 | dependencies = [ 928 | "libafl_core", 929 | "rustversion", 930 | "serde", 931 | ] 932 | 933 | [[package]] 934 | name = "parking_lot" 935 | version = "0.12.3" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 938 | dependencies = [ 939 | "lock_api", 940 | "parking_lot_core", 941 | ] 942 | 943 | [[package]] 944 | name = "parking_lot_core" 945 | version = "0.9.10" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 948 | dependencies = [ 949 | "cfg-if", 950 | "libc", 951 | "redox_syscall", 952 | "smallvec", 953 | "windows-targets", 954 | ] 955 | 956 | [[package]] 957 | name = "postcard" 958 | version = "1.1.3" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" 961 | dependencies = [ 962 | "cobs", 963 | "embedded-io 0.4.0", 964 | "embedded-io 0.6.1", 965 | "serde", 966 | ] 967 | 968 | [[package]] 969 | name = "prettyplease" 970 | version = "0.2.25" 971 | source = "registry+https://github.com/rust-lang/crates.io-index" 972 | checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" 973 | dependencies = [ 974 | "proc-macro2", 975 | "syn", 976 | ] 977 | 978 | [[package]] 979 | name = "proc-macro2" 980 | version = "1.0.93" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" 983 | dependencies = [ 984 | "unicode-ident", 985 | ] 986 | 987 | [[package]] 988 | name = "quote" 989 | version = "1.0.37" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 992 | dependencies = [ 993 | "proc-macro2", 994 | ] 995 | 996 | [[package]] 997 | name = "r-efi" 998 | version = "5.2.0" 999 | source = "registry+https://github.com/rust-lang/crates.io-index" 1000 | checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" 1001 | 1002 | [[package]] 1003 | name = "rand_core" 1004 | version = "0.9.0" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" 1007 | dependencies = [ 1008 | "zerocopy", 1009 | ] 1010 | 1011 | [[package]] 1012 | name = "rangemap" 1013 | version = "1.7.0" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | checksum = "acbbbbea733ec66275512d0b9694f34102e7d5406fdbe2ad8d21b28dce92887c" 1016 | 1017 | [[package]] 1018 | name = "redox_syscall" 1019 | version = "0.5.7" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" 1022 | dependencies = [ 1023 | "bitflags", 1024 | ] 1025 | 1026 | [[package]] 1027 | name = "regex" 1028 | version = "1.12.2" 1029 | source = "registry+https://github.com/rust-lang/crates.io-index" 1030 | checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 1031 | dependencies = [ 1032 | "aho-corasick", 1033 | "memchr", 1034 | "regex-automata", 1035 | "regex-syntax", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "regex-automata" 1040 | version = "0.4.13" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 1043 | dependencies = [ 1044 | "aho-corasick", 1045 | "memchr", 1046 | "regex-syntax", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "regex-syntax" 1051 | version = "0.8.5" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1054 | 1055 | [[package]] 1056 | name = "rustc-demangle" 1057 | version = "0.1.24" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1060 | 1061 | [[package]] 1062 | name = "rustc-hash" 1063 | version = "2.1.1" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 1066 | 1067 | [[package]] 1068 | name = "rustversion" 1069 | version = "1.0.22" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 1072 | 1073 | [[package]] 1074 | name = "ryu" 1075 | version = "1.0.18" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1078 | 1079 | [[package]] 1080 | name = "safe_arch" 1081 | version = "1.0.0" 1082 | source = "registry+https://github.com/rust-lang/crates.io-index" 1083 | checksum = "1f7caad094bd561859bcd467734a720c3c1f5d1f338995351fefe2190c45efed" 1084 | dependencies = [ 1085 | "bytemuck", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "scc" 1090 | version = "2.2.4" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "d8d25269dd3a12467afe2e510f69fb0b46b698e5afb296b59f2145259deaf8e8" 1093 | dependencies = [ 1094 | "sdd", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "scopeguard" 1099 | version = "1.2.0" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1102 | 1103 | [[package]] 1104 | name = "sdd" 1105 | version = "3.0.4" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" 1108 | 1109 | [[package]] 1110 | name = "serde" 1111 | version = "1.0.228" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 1114 | dependencies = [ 1115 | "serde_core", 1116 | "serde_derive", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "serde_anymap" 1121 | version = "0.16.0" 1122 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 1123 | dependencies = [ 1124 | "ahash", 1125 | "ctor", 1126 | "erased-serde", 1127 | "hashbrown", 1128 | "libafl_core", 1129 | "postcard", 1130 | "rustversion", 1131 | "serde", 1132 | "static_assertions", 1133 | ] 1134 | 1135 | [[package]] 1136 | name = "serde_core" 1137 | version = "1.0.228" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 1140 | dependencies = [ 1141 | "serde_derive", 1142 | ] 1143 | 1144 | [[package]] 1145 | name = "serde_derive" 1146 | version = "1.0.228" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 1149 | dependencies = [ 1150 | "proc-macro2", 1151 | "quote", 1152 | "syn", 1153 | ] 1154 | 1155 | [[package]] 1156 | name = "serde_json" 1157 | version = "1.0.145" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 1160 | dependencies = [ 1161 | "itoa", 1162 | "memchr", 1163 | "ryu", 1164 | "serde", 1165 | "serde_core", 1166 | ] 1167 | 1168 | [[package]] 1169 | name = "serial_test" 1170 | version = "3.2.0" 1171 | source = "registry+https://github.com/rust-lang/crates.io-index" 1172 | checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" 1173 | dependencies = [ 1174 | "log", 1175 | "once_cell", 1176 | "parking_lot", 1177 | "scc", 1178 | "serial_test_derive", 1179 | ] 1180 | 1181 | [[package]] 1182 | name = "serial_test_derive" 1183 | version = "3.2.0" 1184 | source = "registry+https://github.com/rust-lang/crates.io-index" 1185 | checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" 1186 | dependencies = [ 1187 | "proc-macro2", 1188 | "quote", 1189 | "syn", 1190 | ] 1191 | 1192 | [[package]] 1193 | name = "shlex" 1194 | version = "1.3.0" 1195 | source = "registry+https://github.com/rust-lang/crates.io-index" 1196 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1197 | 1198 | [[package]] 1199 | name = "shmem_providers" 1200 | version = "0.16.0" 1201 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 1202 | dependencies = [ 1203 | "fast_rands", 1204 | "hashbrown", 1205 | "libafl_core", 1206 | "libc", 1207 | "log", 1208 | "nix", 1209 | "postcard", 1210 | "rustversion", 1211 | "serde", 1212 | "serial_test", 1213 | "uds", 1214 | "uuid", 1215 | "windows", 1216 | ] 1217 | 1218 | [[package]] 1219 | name = "siphasher" 1220 | version = "1.0.1" 1221 | source = "registry+https://github.com/rust-lang/crates.io-index" 1222 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 1223 | 1224 | [[package]] 1225 | name = "smallvec" 1226 | version = "1.13.2" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1229 | 1230 | [[package]] 1231 | name = "static_assertions" 1232 | version = "1.1.0" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1235 | 1236 | [[package]] 1237 | name = "strsim" 1238 | version = "0.11.1" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1241 | 1242 | [[package]] 1243 | name = "syn" 1244 | version = "2.0.111" 1245 | source = "registry+https://github.com/rust-lang/crates.io-index" 1246 | checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" 1247 | dependencies = [ 1248 | "proc-macro2", 1249 | "quote", 1250 | "unicode-ident", 1251 | ] 1252 | 1253 | [[package]] 1254 | name = "thiserror" 1255 | version = "2.0.17" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 1258 | dependencies = [ 1259 | "thiserror-impl", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "thiserror-impl" 1264 | version = "2.0.17" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 1267 | dependencies = [ 1268 | "proc-macro2", 1269 | "quote", 1270 | "syn", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "tuple_list" 1275 | version = "0.1.3" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "141fb9f71ee586d956d7d6e4d5a9ef8e946061188520140f7591b668841d502e" 1278 | 1279 | [[package]] 1280 | name = "tuple_list_ex" 1281 | version = "0.16.0" 1282 | source = "git+https://github.com/AFLplusplus/LibAFL?rev=67f7474a7504597aa466efbddc456ded7f90d649#67f7474a7504597aa466efbddc456ded7f90d649" 1283 | dependencies = [ 1284 | "libafl_core", 1285 | "ownedref", 1286 | "rustversion", 1287 | "serde", 1288 | "tuple_list", 1289 | "typeid", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "typed-builder" 1294 | version = "0.23.2" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "31aa81521b70f94402501d848ccc0ecaa8f93c8eb6999eb9747e72287757ffda" 1297 | dependencies = [ 1298 | "typed-builder-macro", 1299 | ] 1300 | 1301 | [[package]] 1302 | name = "typed-builder-macro" 1303 | version = "0.23.2" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "076a02dc54dd46795c2e9c8282ed40bcfb1e22747e955de9389a1de28190fb26" 1306 | dependencies = [ 1307 | "proc-macro2", 1308 | "quote", 1309 | "syn", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "typeid" 1314 | version = "1.0.3" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" 1317 | 1318 | [[package]] 1319 | name = "uds" 1320 | version = "0.4.2" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "885c31f06fce836457fe3ef09a59f83fe8db95d270b11cd78f40a4666c4d1661" 1323 | dependencies = [ 1324 | "libc", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "unicode-ident" 1329 | version = "1.0.13" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 1332 | 1333 | [[package]] 1334 | name = "unicode-xid" 1335 | version = "0.2.6" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 1338 | 1339 | [[package]] 1340 | name = "unty" 1341 | version = "0.0.4" 1342 | source = "registry+https://github.com/rust-lang/crates.io-index" 1343 | checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" 1344 | 1345 | [[package]] 1346 | name = "utf8parse" 1347 | version = "0.2.2" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1350 | 1351 | [[package]] 1352 | name = "uuid" 1353 | version = "1.19.0" 1354 | source = "registry+https://github.com/rust-lang/crates.io-index" 1355 | checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" 1356 | dependencies = [ 1357 | "getrandom", 1358 | "js-sys", 1359 | "serde_core", 1360 | "wasm-bindgen", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "version_check" 1365 | version = "0.9.5" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1368 | 1369 | [[package]] 1370 | name = "virtue" 1371 | version = "0.0.18" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1" 1374 | 1375 | [[package]] 1376 | name = "wait-timeout" 1377 | version = "0.2.0" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" 1380 | dependencies = [ 1381 | "libc", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "wasi" 1386 | version = "0.14.2+wasi-0.2.4" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 1389 | dependencies = [ 1390 | "wit-bindgen-rt", 1391 | ] 1392 | 1393 | [[package]] 1394 | name = "wasm-bindgen" 1395 | version = "0.2.106" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" 1398 | dependencies = [ 1399 | "cfg-if", 1400 | "once_cell", 1401 | "rustversion", 1402 | "wasm-bindgen-macro", 1403 | "wasm-bindgen-shared", 1404 | ] 1405 | 1406 | [[package]] 1407 | name = "wasm-bindgen-macro" 1408 | version = "0.2.106" 1409 | source = "registry+https://github.com/rust-lang/crates.io-index" 1410 | checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" 1411 | dependencies = [ 1412 | "quote", 1413 | "wasm-bindgen-macro-support", 1414 | ] 1415 | 1416 | [[package]] 1417 | name = "wasm-bindgen-macro-support" 1418 | version = "0.2.106" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" 1421 | dependencies = [ 1422 | "bumpalo", 1423 | "proc-macro2", 1424 | "quote", 1425 | "syn", 1426 | "wasm-bindgen-shared", 1427 | ] 1428 | 1429 | [[package]] 1430 | name = "wasm-bindgen-shared" 1431 | version = "0.2.106" 1432 | source = "registry+https://github.com/rust-lang/crates.io-index" 1433 | checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" 1434 | dependencies = [ 1435 | "unicode-ident", 1436 | ] 1437 | 1438 | [[package]] 1439 | name = "wide" 1440 | version = "1.1.0" 1441 | source = "registry+https://github.com/rust-lang/crates.io-index" 1442 | checksum = "8afd0e867c652e7c27e88620e1fbf073ad060a919235f50b64f273d9d4092931" 1443 | dependencies = [ 1444 | "bytemuck", 1445 | "safe_arch", 1446 | ] 1447 | 1448 | [[package]] 1449 | name = "winapi" 1450 | version = "0.3.9" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1453 | dependencies = [ 1454 | "winapi-i686-pc-windows-gnu", 1455 | "winapi-x86_64-pc-windows-gnu", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "winapi-i686-pc-windows-gnu" 1460 | version = "0.4.0" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1463 | 1464 | [[package]] 1465 | name = "winapi-x86_64-pc-windows-gnu" 1466 | version = "0.4.0" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1469 | 1470 | [[package]] 1471 | name = "windows" 1472 | version = "0.62.2" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" 1475 | dependencies = [ 1476 | "windows-collections", 1477 | "windows-core", 1478 | "windows-future", 1479 | "windows-numerics", 1480 | ] 1481 | 1482 | [[package]] 1483 | name = "windows-collections" 1484 | version = "0.3.2" 1485 | source = "registry+https://github.com/rust-lang/crates.io-index" 1486 | checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" 1487 | dependencies = [ 1488 | "windows-core", 1489 | ] 1490 | 1491 | [[package]] 1492 | name = "windows-core" 1493 | version = "0.62.2" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 1496 | dependencies = [ 1497 | "windows-implement", 1498 | "windows-interface", 1499 | "windows-link", 1500 | "windows-result", 1501 | "windows-strings", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "windows-future" 1506 | version = "0.3.2" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" 1509 | dependencies = [ 1510 | "windows-core", 1511 | "windows-link", 1512 | "windows-threading", 1513 | ] 1514 | 1515 | [[package]] 1516 | name = "windows-implement" 1517 | version = "0.60.2" 1518 | source = "registry+https://github.com/rust-lang/crates.io-index" 1519 | checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 1520 | dependencies = [ 1521 | "proc-macro2", 1522 | "quote", 1523 | "syn", 1524 | ] 1525 | 1526 | [[package]] 1527 | name = "windows-interface" 1528 | version = "0.59.3" 1529 | source = "registry+https://github.com/rust-lang/crates.io-index" 1530 | checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 1531 | dependencies = [ 1532 | "proc-macro2", 1533 | "quote", 1534 | "syn", 1535 | ] 1536 | 1537 | [[package]] 1538 | name = "windows-link" 1539 | version = "0.2.1" 1540 | source = "registry+https://github.com/rust-lang/crates.io-index" 1541 | checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 1542 | 1543 | [[package]] 1544 | name = "windows-numerics" 1545 | version = "0.3.1" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" 1548 | dependencies = [ 1549 | "windows-core", 1550 | "windows-link", 1551 | ] 1552 | 1553 | [[package]] 1554 | name = "windows-result" 1555 | version = "0.4.1" 1556 | source = "registry+https://github.com/rust-lang/crates.io-index" 1557 | checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 1558 | dependencies = [ 1559 | "windows-link", 1560 | ] 1561 | 1562 | [[package]] 1563 | name = "windows-strings" 1564 | version = "0.5.1" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 1567 | dependencies = [ 1568 | "windows-link", 1569 | ] 1570 | 1571 | [[package]] 1572 | name = "windows-sys" 1573 | version = "0.59.0" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1576 | dependencies = [ 1577 | "windows-targets", 1578 | ] 1579 | 1580 | [[package]] 1581 | name = "windows-targets" 1582 | version = "0.52.6" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1585 | dependencies = [ 1586 | "windows_aarch64_gnullvm", 1587 | "windows_aarch64_msvc", 1588 | "windows_i686_gnu", 1589 | "windows_i686_gnullvm", 1590 | "windows_i686_msvc", 1591 | "windows_x86_64_gnu", 1592 | "windows_x86_64_gnullvm", 1593 | "windows_x86_64_msvc", 1594 | ] 1595 | 1596 | [[package]] 1597 | name = "windows-threading" 1598 | version = "0.2.1" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" 1601 | dependencies = [ 1602 | "windows-link", 1603 | ] 1604 | 1605 | [[package]] 1606 | name = "windows_aarch64_gnullvm" 1607 | version = "0.52.6" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1610 | 1611 | [[package]] 1612 | name = "windows_aarch64_msvc" 1613 | version = "0.52.6" 1614 | source = "registry+https://github.com/rust-lang/crates.io-index" 1615 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1616 | 1617 | [[package]] 1618 | name = "windows_i686_gnu" 1619 | version = "0.52.6" 1620 | source = "registry+https://github.com/rust-lang/crates.io-index" 1621 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1622 | 1623 | [[package]] 1624 | name = "windows_i686_gnullvm" 1625 | version = "0.52.6" 1626 | source = "registry+https://github.com/rust-lang/crates.io-index" 1627 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1628 | 1629 | [[package]] 1630 | name = "windows_i686_msvc" 1631 | version = "0.52.6" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1634 | 1635 | [[package]] 1636 | name = "windows_x86_64_gnu" 1637 | version = "0.52.6" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1640 | 1641 | [[package]] 1642 | name = "windows_x86_64_gnullvm" 1643 | version = "0.52.6" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1646 | 1647 | [[package]] 1648 | name = "windows_x86_64_msvc" 1649 | version = "0.52.6" 1650 | source = "registry+https://github.com/rust-lang/crates.io-index" 1651 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1652 | 1653 | [[package]] 1654 | name = "wit-bindgen-rt" 1655 | version = "0.39.0" 1656 | source = "registry+https://github.com/rust-lang/crates.io-index" 1657 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 1658 | dependencies = [ 1659 | "bitflags", 1660 | ] 1661 | 1662 | [[package]] 1663 | name = "xxhash-rust" 1664 | version = "0.8.12" 1665 | source = "registry+https://github.com/rust-lang/crates.io-index" 1666 | checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" 1667 | 1668 | [[package]] 1669 | name = "zerocopy" 1670 | version = "0.8.27" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 1673 | dependencies = [ 1674 | "zerocopy-derive", 1675 | ] 1676 | 1677 | [[package]] 1678 | name = "zerocopy-derive" 1679 | version = "0.8.27" 1680 | source = "registry+https://github.com/rust-lang/crates.io-index" 1681 | checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 1682 | dependencies = [ 1683 | "proc-macro2", 1684 | "quote", 1685 | "syn", 1686 | ] 1687 | --------------------------------------------------------------------------------