Skip to content

Commit

Permalink
Merge pull request #353 from silvergasp/master
Browse files Browse the repository at this point in the history
fuzz: Make goldmark compatible with OSS-Fuzz
  • Loading branch information
yuin authored May 30, 2023
2 parents 4536092 + 5e78751 commit b2df678
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 13 deletions.
61 changes: 61 additions & 0 deletions _tools/build-oss-fuzz-corpus.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
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()
}
29 changes: 16 additions & 13 deletions fuzz/fuzz_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,7 @@ import (
"github.com/yuin/goldmark/util"
)

func Fuzz(f *testing.F) {
bs, err := ioutil.ReadFile("../_test/spec.json")
if err != nil {
panic(err)
}
var testCases []map[string]interface{}
if err := json.Unmarshal(bs, &testCases); err != nil {
panic(err)
}
for _, c := range testCases {
f.Add(c["markdown"])
}

func fuzz(f *testing.F) {
f.Fuzz(func(t *testing.T, orig string) {
markdown := goldmark.New(
goldmark.WithParserOptions(
Expand All @@ -52,3 +40,18 @@ func Fuzz(f *testing.F) {
}
})
}

func FuzzDefault(f *testing.F) {
bs, err := ioutil.ReadFile("../_test/spec.json")
if err != nil {
panic(err)
}
var testCases []map[string]interface{}
if err := json.Unmarshal(bs, &testCases); err != nil {
panic(err)
}
for _, c := range testCases {
f.Add(c["markdown"])
}
fuzz(f)
}
9 changes: 9 additions & 0 deletions fuzz/oss_fuzz_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package fuzz

import (
"testing"
)

func FuzzOss(f *testing.F) {
fuzz(f)
}

0 comments on commit b2df678

Please sign in to comment.