aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-kcidb/kcidb.go
diff options
context:
space:
mode:
Diffstat (limited to 'tools/syz-kcidb/kcidb.go')
-rw-r--r--tools/syz-kcidb/kcidb.go45
1 files changed, 36 insertions, 9 deletions
diff --git a/tools/syz-kcidb/kcidb.go b/tools/syz-kcidb/kcidb.go
index 8d1255cce..429059060 100644
--- a/tools/syz-kcidb/kcidb.go
+++ b/tools/syz-kcidb/kcidb.go
@@ -5,7 +5,9 @@ package main
import (
"context"
+ "encoding/json"
"flag"
+ "os"
"github.com/google/syzkaller/dashboard/dashapi"
"github.com/google/syzkaller/pkg/kcidb"
@@ -25,16 +27,33 @@ func main() {
flagDashAddr = flag.String("addr", "", "dashboard address")
flagDashKey = flag.String("key", "", "dashboard API key")
flagBug = flag.String("bug", "", "bug ID to upload to KCIDB")
+ flagInput = flag.String("input", "", "input JSON file with bug report")
+ flagOutput = flag.String("output", "", "output JSON file for KCIDB data")
)
flag.Parse()
- dash, err := dashapi.New(*flagDashClient, *flagDashAddr, *flagDashKey)
- if err != nil {
- tool.Fail(err)
- }
- bug, err := dash.LoadBug(*flagBug)
- if err != nil {
- tool.Fail(err)
+ var bug *dashapi.BugReport
+
+ // If input file is specified, read from file instead of calling API
+ if *flagInput != "" {
+ data, err := os.ReadFile(*flagInput)
+ if err != nil {
+ tool.Fail(err)
+ }
+ bug = &dashapi.BugReport{}
+ if err := json.Unmarshal(data, bug); err != nil {
+ tool.Fail(err)
+ }
+ } else {
+ // Original behavior: fetch from dashboard API
+ dash, err := dashapi.New(*flagDashClient, *flagDashAddr, *flagDashKey)
+ if err != nil {
+ tool.Fail(err)
+ }
+ bug, err = dash.LoadBug(*flagBug)
+ if err != nil {
+ tool.Fail(err)
+ }
}
kcidb.Validate = true
@@ -44,7 +63,15 @@ func main() {
}
defer client.Close()
- if err := client.Publish(bug); err != nil {
- tool.Fail(err)
+ // If output file is specified, write to file instead of submitting.
+ if *flagOutput != "" {
+ if err := client.PublishToFile(bug, *flagOutput); err != nil {
+ tool.Fail(err)
+ }
+ } else {
+ // Original behavior: submit to REST API
+ if err := client.Publish(bug); err != nil {
+ tool.Fail(err)
+ }
}
}