@@ -81,6 +81,7 @@ func (serv *HTTPServer) Serve() {
8181 handle ("/vms" , serv .httpVMs )
8282 handle ("/vm" , serv .httpVM )
8383 handle ("/metrics" , promhttp .HandlerFor (prometheus .DefaultGatherer , promhttp.HandlerOpts {}).ServeHTTP )
84+ handle ("/addcandidate" , serv .httpAddCandidate )
8485 handle ("/syscalls" , serv .httpSyscalls )
8586 handle ("/corpus" , serv .httpCorpus )
8687 handle ("/corpus.db" , serv .httpDownloadCorpus )
@@ -734,6 +735,46 @@ func (serv *HTTPServer) modulesInfo(w http.ResponseWriter, r *http.Request) {
734735 serv .jsonPage (w , r , "modules" , cover .Modules )
735736}
736737
738+ func (serv * HTTPServer ) httpAddCandidate (w http.ResponseWriter , r * http.Request ) {
739+ if r .Method != http .MethodPost {
740+ http .Error (w , "only POST method supported" , http .StatusMethodNotAllowed )
741+ return
742+ }
743+ err := r .ParseMultipartForm (20 << 20 )
744+ if err != nil {
745+ http .Error (w , fmt .Sprintf ("failed to parse form: %v" , err ), http .StatusBadRequest )
746+ return
747+ }
748+ file , _ , err := r .FormFile ("file" )
749+ if err != nil {
750+ http .Error (w , fmt .Sprintf ("failed to retrieve file from form-data: %v" , err ), http .StatusBadRequest )
751+ return
752+ }
753+ defer file .Close ()
754+ data , err := io .ReadAll (file )
755+ if err != nil {
756+ http .Error (w , fmt .Sprintf ("failed to read file: %v" , err ), http .StatusBadRequest )
757+ return
758+ }
759+ prog , err := ParseSeed (serv .Cfg .Target , data )
760+ if err != nil {
761+ http .Error (w , fmt .Sprintf ("failed to parse seed: %v" , err ), http .StatusBadRequest )
762+ return
763+ }
764+ if ! prog .OnlyContains (serv .Fuzzer .Load ().Config .EnabledCalls ) {
765+ http .Error (w , "contains disabled syscall" , http .StatusBadRequest )
766+ return
767+ }
768+ var flags fuzzer.ProgFlags
769+ flags |= fuzzer .ProgMinimized
770+ flags |= fuzzer .ProgSmashed
771+ candidates := []fuzzer.Candidate {{
772+ Prog : prog ,
773+ Flags : flags ,
774+ }}
775+ serv .Fuzzer .Load ().AddCandidates (candidates )
776+ }
777+
737778var alphaNumRegExp = regexp .MustCompile (`^[a-zA-Z0-9]*$` )
738779
739780func isAlphanumeric (s string ) bool {
0 commit comments