diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-12-11 18:18:58 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-12-13 18:56:36 +0100 |
| commit | 3fc0a844bfb8efd6f8fe32585e4fd5d9f2af3fc3 (patch) | |
| tree | 9a6f4e9737e4312bb32ec9ea820cfa508e5add80 /syz-manager/html.go | |
| parent | 138959733bc731cc789fa7c7473e493b2e104bcc (diff) | |
syz-manager: better encapsulate report generator
Avoid global variables and implicit dependencies on previous initialization.
Diffstat (limited to 'syz-manager/html.go')
| -rw-r--r-- | syz-manager/html.go | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/syz-manager/html.go b/syz-manager/html.go index 24126adb5..0b606f099 100644 --- a/syz-manager/html.go +++ b/syz-manager/html.go @@ -214,22 +214,24 @@ func (mgr *Manager) httpCover(w http.ResponseWriter, r *http.Request) { } // Note: initCover is executed without mgr.mu because it takes very long time // (but it only reads config and it protected by initCoverOnce). - if err := initCover(mgr.cfg); err != nil { + rg, err := getReportGenerator(mgr.cfg) + if err != nil { http.Error(w, fmt.Sprintf("failed to generate coverage profile: %v", err), http.StatusInternalServerError) return } mgr.mu.Lock() defer mgr.mu.Unlock() - mgr.httpCoverCover(w, r, reportGenerator.DoHTML) + mgr.httpCoverCover(w, r, rg, rg.DoHTML) } -func (mgr *Manager) httpCoverCover(w http.ResponseWriter, r *http.Request, do func(io.Writer, []cover.Prog) error) { +func (mgr *Manager) httpCoverCover(w http.ResponseWriter, r *http.Request, + rg *cover.ReportGenerator, do func(io.Writer, []cover.Prog) error) { var progs []cover.Prog if sig := r.FormValue("input"); sig != "" { inp := mgr.corpus[sig] progs = append(progs, cover.Prog{ Data: string(inp.Prog), - PCs: coverToPCs(mgr.sysTarget, inp.Cover), + PCs: coverToPCs(rg, inp.Cover), }) } else { call := r.FormValue("call") @@ -239,7 +241,7 @@ func (mgr *Manager) httpCoverCover(w http.ResponseWriter, r *http.Request, do fu } progs = append(progs, cover.Prog{ Data: string(inp.Prog), - PCs: coverToPCs(mgr.sysTarget, inp.Cover), + PCs: coverToPCs(rg, inp.Cover), }) } } @@ -286,13 +288,14 @@ func (mgr *Manager) httpFuncCover(w http.ResponseWriter, r *http.Request) { http.Error(w, "coverage is not enabled", http.StatusInternalServerError) return } - if err := initCover(mgr.cfg); err != nil { + rg, err := getReportGenerator(mgr.cfg) + if err != nil { http.Error(w, fmt.Sprintf("failed to generate coverage profile: %v", err), http.StatusInternalServerError) return } mgr.mu.Lock() defer mgr.mu.Unlock() - mgr.httpCoverCover(w, r, reportGenerator.DoCSV) + mgr.httpCoverCover(w, r, rg, rg.DoCSV) } func (mgr *Manager) httpPrio(w http.ResponseWriter, r *http.Request) { @@ -392,8 +395,9 @@ func (mgr *Manager) httpReport(w http.ResponseWriter, r *http.Request) { func (mgr *Manager) httpRawCover(w http.ResponseWriter, r *http.Request) { // Note: initCover is executed without mgr.mu because it takes very long time // (but it only reads config and it protected by initCoverOnce). - if err := initCover(mgr.cfg); err != nil { - http.Error(w, initCoverError.Error(), http.StatusInternalServerError) + rg, err := getReportGenerator(mgr.cfg) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) return } mgr.mu.Lock() @@ -403,7 +407,7 @@ func (mgr *Manager) httpRawCover(w http.ResponseWriter, r *http.Request) { for _, inp := range mgr.corpus { cov.Merge(inp.Cover) } - pcs := coverToPCs(mgr.sysTarget, cov.Serialize()) + pcs := coverToPCs(rg, cov.Serialize()) sort.Slice(pcs, func(i, j int) bool { return pcs[i] < pcs[j] }) |
