mirror of
https://github.com/yuin/goldmark
synced 2025-03-04 23:04:52 +00:00
This set of changes will make goldmark compatible with the fuzzing requirements for google/oss-fuzz, a continuous fuzzing service. To ensure compatibility this change adds; - A seperate fuzzing target that doesn't use the builtin fuzz corpus - A tool to convert the builtin fuzz corpus to a zip file corpus that is compatible with oss-fuzz
61 lines
No EOL
1.2 KiB
Go
61 lines
No EOL
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"archive/zip"
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type TestCase struct {
|
|
Example int `json:"example"`
|
|
Markdown string `json:"markdown"`
|
|
}
|
|
|
|
func main() {
|
|
corpus_out := os.Args[1]
|
|
if !strings.HasSuffix(corpus_out, ".zip") {
|
|
log.Fatalln("Expected command line:", os.Args[0], "<corpus_output>.zip")
|
|
}
|
|
|
|
zip_file, err := os.Create(corpus_out)
|
|
|
|
zip_writer := zip.NewWriter(zip_file)
|
|
|
|
if err != nil {
|
|
log.Fatalln("Failed creating file:", err)
|
|
}
|
|
|
|
json_corpus := "_test/spec.json"
|
|
bs, err := ioutil.ReadFile(json_corpus)
|
|
if err != nil {
|
|
log.Fatalln("Could not open file:", json_corpus)
|
|
panic(err)
|
|
}
|
|
var testCases []TestCase
|
|
if err := json.Unmarshal(bs, &testCases); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for _, c := range testCases {
|
|
file_in_zip := "example-" + strconv.Itoa(c.Example)
|
|
f, err := zip_writer.Create(file_in_zip)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
_, err = f.Write([]byte(c.Markdown))
|
|
if err != nil {
|
|
log.Fatalf("Failed to write file: %s into zip file", file_in_zip)
|
|
}
|
|
}
|
|
|
|
err = zip_writer.Close()
|
|
if err != nil {
|
|
log.Fatal("Failed to close zip writer", err)
|
|
}
|
|
|
|
zip_file.Close()
|
|
} |