From 6692c1db8a929233258ecd0282f4082166df0357 Mon Sep 17 00:00:00 2001 From: Mzack9999 Date: Wed, 7 May 2025 23:18:33 +0200 Subject: [PATCH] lint --- cmd/docgen/docgen.go | 4 +- cmd/functional-test/main.go | 4 +- cmd/generate-checksum/main.go | 4 +- cmd/integration-test/custom-dir.go | 4 +- cmd/integration-test/dsl.go | 4 +- cmd/integration-test/flow.go | 2 +- cmd/integration-test/fuzz.go | 10 +- cmd/integration-test/generic.go | 8 +- cmd/integration-test/headless.go | 8 +- cmd/integration-test/http.go | 93 ++++++++++--------- cmd/integration-test/integration-test.go | 4 +- cmd/integration-test/library.go | 4 +- cmd/integration-test/loader.go | 32 ++++--- cmd/integration-test/network.go | 24 +++-- cmd/integration-test/ssl.go | 24 +++-- cmd/integration-test/template-dir.go | 4 +- cmd/integration-test/workflow.go | 24 ++--- cmd/nuclei/main.go | 6 +- cmd/tmc/main.go | 10 +- cmd/tools/fuzzplayground/main.go | 4 +- examples/with_speed_control/main.go | 1 + internal/pdcp/writer.go | 18 ++-- internal/runner/healthcheck.go | 6 +- internal/runner/options.go | 10 +- internal/runner/proxy.go | 11 ++- internal/runner/runner.go | 5 +- internal/runner/runner_test.go | 24 ++--- internal/server/server.go | 2 +- pkg/authprovider/authx/dynamic.go | 8 +- pkg/catalog/config/ignorefile.go | 4 +- pkg/catalog/config/template.go | 4 +- pkg/catalog/loader/ai_loader.go | 4 +- pkg/catalog/loader/loader.go | 4 +- pkg/catalog/loader/remote_loader.go | 9 +- pkg/external/customtemplates/s3.go | 4 +- pkg/fuzz/analyzers/time/analyzer.go | 2 +- pkg/fuzz/analyzers/time/time_delay.go | 6 +- pkg/fuzz/component/path.go | 8 +- pkg/fuzz/component/path_test.go | 6 +- pkg/fuzz/component/query.go | 2 +- pkg/fuzz/component/query_test.go | 4 +- pkg/fuzz/dataformat/multipart.go | 6 +- pkg/fuzz/execute.go | 1 + pkg/fuzz/parts.go | 2 +- pkg/fuzz/stats/stats.go | 5 +- pkg/input/formats/burp/burp_test.go | 4 +- pkg/input/formats/formats.go | 4 +- pkg/input/formats/json/json_test.go | 4 +- pkg/input/formats/openapi/generator.go | 8 +- pkg/input/formats/openapi/openapi_test.go | 4 +- pkg/input/formats/swagger/swagger_test.go | 4 +- pkg/input/formats/yaml/multidoc_test.go | 4 +- pkg/input/provider/http/multiformat.go | 2 +- pkg/input/provider/list/hmap.go | 4 +- pkg/input/transform_test.go | 4 +- pkg/installer/template_test.go | 8 +- pkg/installer/versioncheck.go | 4 +- pkg/installer/zipslip_unix_test.go | 4 +- pkg/js/compiler/compiler.go | 1 - pkg/js/compiler/pool.go | 1 - pkg/js/devtools/bindgen/output.go | 20 ++-- pkg/js/gojs/gojs.go | 2 + pkg/js/gojs/set.go | 1 + pkg/js/libs/kerberos/sendtokdc.go | 16 +++- pkg/js/libs/ldap/ldap.go | 2 +- pkg/js/libs/mssql/mssql.go | 12 ++- pkg/js/libs/mysql/mysql.go | 12 ++- pkg/js/libs/mysql/mysql_private.go | 4 +- pkg/js/libs/oracle/oracle.go | 4 +- pkg/js/libs/pop3/pop3.go | 4 +- pkg/js/libs/postgres/postgres.go | 13 ++- pkg/js/libs/rdp/rdp.go | 8 +- pkg/js/libs/redis/redis.go | 20 +++- pkg/js/libs/rsync/rsync.go | 4 +- pkg/js/libs/smb/smb.go | 8 +- pkg/js/libs/smb/smb_private.go | 4 +- pkg/js/libs/smb/smbghost.go | 4 +- pkg/js/libs/smtp/smtp.go | 8 +- pkg/js/libs/ssh/ssh.go | 8 +- pkg/js/libs/telnet/telnet.go | 4 +- pkg/js/libs/vnc/vnc.go | 4 +- pkg/js/utils/pgwrap/pgwrap.go | 5 + pkg/js/utils/util.go | 4 +- pkg/operators/operators.go | 2 +- pkg/output/output.go | 12 +-- pkg/progress/progress.go | 2 +- pkg/projectfile/project.go | 2 +- pkg/protocols/code/code.go | 8 +- .../common/automaticscan/automaticscan.go | 6 +- .../common/expressions/expressions.go | 7 +- pkg/protocols/common/generators/load.go | 4 +- .../common/hosterrorscache/hosterrorscache.go | 2 +- pkg/protocols/common/interactsh/interactsh.go | 6 +- pkg/protocols/common/protocolstate/state.go | 2 +- pkg/protocols/common/randomip/randomip.go | 1 + pkg/protocols/dns/cluster.go | 2 +- pkg/protocols/dns/dnsclientpool/clientpool.go | 1 + pkg/protocols/dns/operators.go | 4 +- pkg/protocols/file/file.go | 2 +- pkg/protocols/file/find.go | 4 +- pkg/protocols/file/find_test.go | 4 +- pkg/protocols/file/request.go | 18 +++- pkg/protocols/file/request_test.go | 4 +- pkg/protocols/headless/engine/engine.go | 4 +- pkg/protocols/headless/engine/page.go | 6 +- pkg/protocols/headless/engine/page_actions.go | 3 +- .../headless/engine/page_actions_test.go | 8 +- pkg/protocols/headless/request.go | 12 ++- pkg/protocols/http/build_request.go | 6 +- pkg/protocols/http/build_request_test.go | 8 +- pkg/protocols/http/cluster.go | 1 + pkg/protocols/http/race/syncedreadcloser.go | 4 +- pkg/protocols/http/request.go | 8 +- pkg/protocols/http/request_annotations.go | 6 +- .../http/request_annotations_test.go | 4 +- pkg/protocols/http/request_fuzz.go | 8 +- pkg/protocols/http/request_test.go | 6 +- pkg/protocols/http/signerpool/signerpool.go | 2 +- pkg/protocols/http/utils.go | 2 +- pkg/protocols/network/request.go | 9 +- pkg/protocols/offlinehttp/find_test.go | 4 +- .../offlinehttp/read_response_test.go | 6 +- pkg/protocols/offlinehttp/request.go | 4 +- pkg/protocols/ssl/ssl.go | 1 + pkg/protocols/utils/variables.go | 5 +- pkg/protocols/websocket/websocket.go | 4 +- pkg/reporting/dedupe/dedupe.go | 4 +- pkg/reporting/dedupe/dedupe_test.go | 4 +- pkg/reporting/exporters/es/elasticsearch.go | 4 +- pkg/reporting/exporters/markdown/markdown.go | 4 +- pkg/reporting/format/format_utils.go | 12 +-- pkg/reporting/reporting.go | 6 +- pkg/reporting/trackers/linear/linear.go | 4 +- pkg/scan/charts/charts.go | 4 +- pkg/scan/charts/echarts.go | 8 +- pkg/templates/cluster.go | 7 +- pkg/templates/compile.go | 5 +- pkg/templates/parser.go | 4 +- pkg/templates/templates.go | 6 +- pkg/testutils/fuzzplayground/db.go | 4 +- pkg/testutils/fuzzplayground/server.go | 12 ++- pkg/testutils/integration.go | 6 +- pkg/tmplexec/flow/flow_executor.go | 5 +- pkg/tmplexec/flow/flow_internal.go | 2 +- 144 files changed, 622 insertions(+), 357 deletions(-) diff --git a/cmd/docgen/docgen.go b/cmd/docgen/docgen.go index 51c2a195d..ca075a19c 100644 --- a/cmd/docgen/docgen.go +++ b/cmd/docgen/docgen.go @@ -19,7 +19,9 @@ func writeToFile(filename string, data []byte) { if err != nil { log.Fatalf("Could not create file %s: %s\n", filename, err) } - defer file.Close() + defer func() { + _ = file.Close() + }() _, err = file.Write(data) if err != nil { diff --git a/cmd/functional-test/main.go b/cmd/functional-test/main.go index 8a5cebc59..8cf2db06a 100644 --- a/cmd/functional-test/main.go +++ b/cmd/functional-test/main.go @@ -41,7 +41,9 @@ func runFunctionalTests(debug bool) (error, bool) { if err != nil { return errors.Wrap(err, "could not open test cases"), true } - defer file.Close() + defer func() { + _ = file.Close() + }() errored, failedTestCases := runTestCases(file, debug) diff --git a/cmd/generate-checksum/main.go b/cmd/generate-checksum/main.go index a381387fa..9a3e7b8ed 100644 --- a/cmd/generate-checksum/main.go +++ b/cmd/generate-checksum/main.go @@ -23,7 +23,9 @@ func main() { if err != nil { log.Fatalf("Could not create file: %s\n", err) } - defer file.Close() + defer func() { + _ = file.Close() + }() err = filepath.WalkDir(templatesDirectory, func(path string, d fs.DirEntry, err error) error { if err != nil || d.IsDir() { diff --git a/cmd/integration-test/custom-dir.go b/cmd/integration-test/custom-dir.go index 550027f06..b1ea83cc6 100644 --- a/cmd/integration-test/custom-dir.go +++ b/cmd/integration-test/custom-dir.go @@ -18,7 +18,9 @@ func (h *customConfigDirTest) Execute(filePath string) error { if err != nil { return err } - defer os.RemoveAll(customTempDirectory) + defer func() { + _ = os.RemoveAll(customTempDirectory) + }() results, err := testutils.RunNucleiBareArgsAndGetResults(debug, []string{"NUCLEI_CONFIG_DIR=" + customTempDirectory}, "-t", filePath, "-u", "8x8exch02.8x8.com") if err != nil { return err diff --git a/cmd/integration-test/dsl.go b/cmd/integration-test/dsl.go index 4e4a275ef..c311b8292 100644 --- a/cmd/integration-test/dsl.go +++ b/cmd/integration-test/dsl.go @@ -21,7 +21,7 @@ type dslVersionWarning struct{} func (d *dslVersionWarning) Execute(templatePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "DSL version parsing warning test") + _, _ = fmt.Fprintf(w, "DSL version parsing warning test") }) ts := httptest.NewServer(router) defer ts.Close() @@ -37,7 +37,7 @@ type dslShowVersionWarning struct{} func (d *dslShowVersionWarning) Execute(templatePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "DSL version parsing warning test") + _, _ = fmt.Fprintf(w, "DSL version parsing warning test") }) ts := httptest.NewServer(router) defer ts.Close() diff --git a/cmd/integration-test/flow.go b/cmd/integration-test/flow.go index 46ae7cf5f..4c9be49b0 100644 --- a/cmd/integration-test/flow.go +++ b/cmd/integration-test/flow.go @@ -49,7 +49,7 @@ func (t *iterateValuesFlow) Execute(filePath string) error { } router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.WriteHeader(http.StatusOK) - _, _ = w.Write([]byte(fmt.Sprint(testemails))) + _, _ = fmt.Fprint(w, fmt.Sprint(testemails)) }) router.GET("/user/"+getBase64(testemails[0]), func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.WriteHeader(http.StatusOK) diff --git a/cmd/integration-test/fuzz.go b/cmd/integration-test/fuzz.go index 230fff031..c2c4bee3a 100644 --- a/cmd/integration-test/fuzz.go +++ b/cmd/integration-test/fuzz.go @@ -55,7 +55,7 @@ func (h *httpFuzzQuery) Execute(filePath string) error { router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Header().Set("Content-Type", "text/html") value := r.URL.Query().Get("id") - fmt.Fprintf(w, "This is test matcher text: %v", value) + _, _ = fmt.Fprintf(w, "This is test matcher text: %v", value) }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -75,7 +75,7 @@ func (h *fuzzModeOverride) Execute(filePath string) error { router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Header().Set("Content-Type", "text/html") value := r.URL.Query().Get("id") - fmt.Fprintf(w, "This is test matcher text: %v", value) + _, _ = fmt.Fprintf(w, "This is test matcher text: %v", value) }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -120,7 +120,7 @@ func (h *fuzzTypeOverride) Execute(filePath string) error { router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Header().Set("Content-Type", "text/html") value := r.URL.Query().Get("id") - fmt.Fprintf(w, "This is test matcher text: %v", value) + _, _ = fmt.Fprintf(w, "This is test matcher text: %v", value) }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -164,7 +164,7 @@ func (h *HeadlessFuzzingQuery) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { resp := fmt.Sprintf("%s", r.URL.Query().Get("url")) - fmt.Fprint(w, resp) + _, _ = fmt.Fprint(w, resp) }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -190,7 +190,7 @@ func (h *fuzzMultipleMode) Execute(filePath string) error { } w.Header().Set("Content-Type", "text/html") resp := fmt.Sprintf("

This is multi-mode fuzzing test: %v

", xClientId) - fmt.Fprint(w, resp) + _, _ = fmt.Fprint(w, resp) }) ts := httptest.NewTLSServer(router) defer ts.Close() diff --git a/cmd/integration-test/generic.go b/cmd/integration-test/generic.go index 95ab5694c..f4222a3bc 100644 --- a/cmd/integration-test/generic.go +++ b/cmd/integration-test/generic.go @@ -82,13 +82,15 @@ func (h *clientCertificate) Execute(filePath string) error { return } - fmt.Fprintf(w, "Hello, %s!\n", r.TLS.PeerCertificates[0].Subject) + _, _ = fmt.Fprintf(w, "Hello, %s!\n", r.TLS.PeerCertificates[0].Subject) }) _ = os.WriteFile("server.crt", []byte(serverCRT), permissionutil.ConfigFilePermission) _ = os.WriteFile("server.key", []byte(serverKey), permissionutil.ConfigFilePermission) - defer os.Remove("server.crt") - defer os.Remove("server.key") + defer func() { + _ = os.Remove("server.crt") + _ = os.Remove("server.key") + }() serverCert, _ := tls.LoadX509KeyPair("server.crt", "server.key") diff --git a/cmd/integration-test/headless.go b/cmd/integration-test/headless.go index abe93acc9..abc2a0368 100644 --- a/cmd/integration-test/headless.go +++ b/cmd/integration-test/headless.go @@ -178,7 +178,9 @@ func (h *headlessFileUpload) Execute(filePath string) error { return } - defer file.Close() + defer func() { + _ = file.Close() + }() content, err := io.ReadAll(file) if err != nil { @@ -235,7 +237,9 @@ func (h *headlessFileUploadNegative) Execute(filePath string) error { return } - defer file.Close() + defer func() { + _ = file.Close() + }() content, err := io.ReadAll(file) if err != nil { diff --git a/cmd/integration-test/http.go b/cmd/integration-test/http.go index be75506cb..a27330ebf 100644 --- a/cmd/integration-test/http.go +++ b/cmd/integration-test/http.go @@ -108,7 +108,7 @@ func (h *httpMatcherExtractorDynamicExtractor) Execute(filePath string) error { Domains ` - fmt.Fprint(w, html) + _, _ = fmt.Fprint(w, html) }) router.GET("/domains", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { html := ` @@ -121,7 +121,7 @@ func (h *httpMatcherExtractorDynamicExtractor) Execute(filePath string) error { ` - fmt.Fprint(w, html) + _, _ = fmt.Fprint(w, html) }) ts := httptest.NewServer(router) defer ts.Close() @@ -143,7 +143,7 @@ func (h *httpInteractshRequest) Execute(filePath string) error { value := r.Header.Get("url") if value != "" { if resp, _ := retryablehttp.DefaultClient().Get(value); resp != nil { - resp.Body.Close() + _ = resp.Body.Close() } } }) @@ -213,7 +213,7 @@ func (h *httpInteractshStopAtFirstMatchRequest) Execute(filePath string) error { value := r.Header.Get("url") if value != "" { if resp, _ := retryablehttp.DefaultClient().Get(value); resp != nil { - resp.Body.Close() + _ = resp.Body.Close() } } }) @@ -235,7 +235,7 @@ func (h *httpGetHeaders) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { if strings.EqualFold(r.Header.Get("test"), "nuclei") { - fmt.Fprintf(w, "This is test headers matcher text") + _, _ = fmt.Fprintf(w, "This is test headers matcher text") } }) ts := httptest.NewServer(router) @@ -256,7 +256,7 @@ func (h *httpGetQueryString) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { if strings.EqualFold(r.URL.Query().Get("test"), "nuclei") { - fmt.Fprintf(w, "This is test querystring matcher text") + _, _ = fmt.Fprintf(w, "This is test querystring matcher text") } }) ts := httptest.NewServer(router) @@ -279,7 +279,7 @@ func (h *httpGetRedirects) Execute(filePath string) error { http.Redirect(w, r, "/redirected", http.StatusFound) }) router.GET("/redirected", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test redirects matcher text") + _, _ = fmt.Fprintf(w, "This is test redirects matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -329,7 +329,7 @@ func (h *httpDisableRedirects) Execute(filePath string) error { http.Redirect(w, r, "/redirected", http.StatusMovedPermanently) }) router.GET("/redirected", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test redirects matcher text") + _, _ = fmt.Fprintf(w, "This is test redirects matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -348,7 +348,7 @@ type httpGet struct{} func (h *httpGet) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -367,7 +367,7 @@ type httpDSLVariable struct{} func (h *httpDSLVariable) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -450,7 +450,7 @@ func (h *httpPostBody) Execute(filePath string) error { return } if strings.EqualFold(r.Form.Get("username"), "test") && strings.EqualFold(r.Form.Get("password"), "nuclei") { - fmt.Fprintf(w, "This is test post-body matcher text") + _, _ = fmt.Fprintf(w, "This is test post-body matcher text") } }) ts := httptest.NewServer(router) @@ -485,7 +485,7 @@ func (h *httpPostJSONBody) Execute(filePath string) error { return } if strings.EqualFold(obj.Username, "test") && strings.EqualFold(obj.Password, "nuclei") { - fmt.Fprintf(w, "This is test post-json-body matcher text") + _, _ = fmt.Fprintf(w, "This is test post-json-body matcher text") } }) ts := httptest.NewServer(router) @@ -525,7 +525,7 @@ func (h *httpPostMultipartBody) Execute(filePath string) error { return } if strings.EqualFold(password[0], "nuclei") && strings.EqualFold(file[0].Filename, "username") { - fmt.Fprintf(w, "This is test post-multipart matcher text") + _, _ = fmt.Fprintf(w, "This is test post-multipart matcher text") } }) ts := httptest.NewServer(router) @@ -555,12 +555,12 @@ func (h *httpRawDynamicExtractor) Execute(filePath string) error { return } if strings.EqualFold(r.Form.Get("testing"), "parameter") { - fmt.Fprintf(w, "Token: 'nuclei'") + _, _ = fmt.Fprintf(w, "Token: 'nuclei'") } }) router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { if strings.EqualFold(r.URL.Query().Get("username"), "nuclei") { - fmt.Fprintf(w, "Test is test-dynamic-extractor-raw matcher text") + _, _ = fmt.Fprintf(w, "Test is test-dynamic-extractor-raw matcher text") } }) ts := httptest.NewServer(router) @@ -584,7 +584,7 @@ func (h *httpRawGetQuery) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { if strings.EqualFold(r.URL.Query().Get("test"), "nuclei") { - fmt.Fprintf(w, "Test is test raw-get-query-matcher text") + _, _ = fmt.Fprintf(w, "Test is test raw-get-query-matcher text") } }) ts := httptest.NewServer(router) @@ -604,7 +604,7 @@ type httpRawGet struct{} func (h *httpRawGet) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "Test is test raw-get-matcher text") + _, _ = fmt.Fprintf(w, "Test is test raw-get-matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -633,7 +633,7 @@ func (h *httpRawWithParams) Execute(filePath string) error { if !reflect.DeepEqual(params["key2"], []string{"value2"}) { errx = errorutil.WrapfWithNil(errx, "expected %v, got %v", []string{"value2"}, params["key2"]) } - fmt.Fprintf(w, "Test is test raw-params-matcher text") + _, _ = fmt.Fprintf(w, "Test is test raw-params-matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -685,11 +685,12 @@ func (h *httpRawPayload) Execute(filePath string) error { routerErr = err return } + // nolint if !(strings.EqualFold(r.Header.Get("another_header"), "bnVjbGVp") || strings.EqualFold(r.Header.Get("another_header"), "Z3Vlc3Q=")) { return } if strings.EqualFold(r.Form.Get("username"), "test") && (strings.EqualFold(r.Form.Get("password"), "nuclei") || strings.EqualFold(r.Form.Get("password"), "guest")) { - fmt.Fprintf(w, "Test is raw-payload matcher text") + _, _ = fmt.Fprintf(w, "Test is raw-payload matcher text") } }) ts := httptest.NewServer(router) @@ -719,7 +720,7 @@ func (h *httpRawPostBody) Execute(filePath string) error { return } if strings.EqualFold(r.Form.Get("username"), "test") && strings.EqualFold(r.Form.Get("password"), "nuclei") { - fmt.Fprintf(w, "Test is test raw-post-body-matcher text") + _, _ = fmt.Fprintf(w, "Test is test raw-post-body-matcher text") } }) ts := httptest.NewServer(router) @@ -872,7 +873,7 @@ func (h *httpRawCookieReuse) Execute(filePath string) error { } if strings.EqualFold(cookie.Value, "test") { - fmt.Fprintf(w, "Test is test-cookie-reuse matcher text") + _, _ = fmt.Fprintf(w, "Test is test-cookie-reuse matcher text") } }) ts := httptest.NewServer(router) @@ -950,7 +951,9 @@ func (h *httpRequestSelfContained) Execute(filePath string) error { go func() { _ = server.ListenAndServe() }() - defer server.Close() + defer func() { + _ = server.Close() + }() results, err := testutils.RunNucleiTemplateAndGetResults(filePath, "", debug, "-esc") if err != nil { @@ -986,7 +989,9 @@ func (h *httpRequestSelfContainedWithParams) Execute(filePath string) error { go func() { _ = server.ListenAndServe() }() - defer server.Close() + defer func() { + _ = server.Close() + }() results, err := testutils.RunNucleiTemplateAndGetResults(filePath, "", debug, "-esc") if err != nil { @@ -1019,7 +1024,9 @@ func (h *httpRequestSelfContainedFileInput) Execute(filePath string) error { go func() { _ = server.ListenAndServe() }() - defer server.Close() + defer func() { + _ = server.Close() + }() // create temp file FileLoc, err := os.CreateTemp("", "self-contained-payload-*.txt") @@ -1029,7 +1036,9 @@ func (h *httpRequestSelfContainedFileInput) Execute(filePath string) error { if _, err := FileLoc.Write([]byte("one\ntwo\n")); err != nil { return errorutil.NewWithErr(err).Msgf("failed to write payload to temp file") } - defer FileLoc.Close() + defer func() { + _ = FileLoc.Close() + }() results, err := testutils.RunNucleiTemplateAndGetResults(filePath, "", debug, "-V", "test="+FileLoc.Name(), "-esc") if err != nil { @@ -1052,7 +1061,7 @@ type httpGetCaseInsensitive struct{} func (h *httpGetCaseInsensitive) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "THIS IS TEST MATCHER TEXT") + _, _ = fmt.Fprintf(w, "THIS IS TEST MATCHER TEXT") }) ts := httptest.NewServer(router) defer ts.Close() @@ -1071,7 +1080,7 @@ type httpGetCaseInsensitiveCluster struct{} func (h *httpGetCaseInsensitiveCluster) Execute(filesPath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -1154,7 +1163,7 @@ type httpStopAtFirstMatch struct{} func (h *httpStopAtFirstMatch) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test") + _, _ = fmt.Fprintf(w, "This is test") }) ts := httptest.NewServer(router) defer ts.Close() @@ -1173,7 +1182,7 @@ type httpStopAtFirstMatchWithExtractors struct{} func (h *httpStopAtFirstMatchWithExtractors) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test") + _, _ = fmt.Fprintf(w, "This is test") }) ts := httptest.NewServer(router) defer ts.Close() @@ -1192,7 +1201,7 @@ type httpVariables struct{} func (h *httpVariables) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "%s\n%s\n%s", r.Header.Get("Test"), r.Header.Get("Another"), r.Header.Get("Email")) + _, _ = fmt.Fprintf(w, "%s\n%s\n%s", r.Header.Get("Test"), r.Header.Get("Another"), r.Header.Get("Email")) }) ts := httptest.NewServer(router) defer ts.Close() @@ -1294,7 +1303,7 @@ func (h *httpRedirectMatchURL) Execute(filePath string) error { _, _ = w.Write([]byte("This is test redirects matcher text")) }) router.GET("/redirected", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test redirects matcher text") + _, _ = fmt.Fprintf(w, "This is test redirects matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -1342,7 +1351,7 @@ func (h *annotationTimeout) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { time.Sleep(4 * time.Second) - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -1362,7 +1371,7 @@ func (h *customAttackType) Execute(filePath string) error { got := []string{} router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { got = append(got, r.URL.RawQuery) - fmt.Fprintf(w, "This is test custom payload") + _, _ = fmt.Fprintf(w, "This is test custom payload") }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -1410,7 +1419,7 @@ func (h *httpCLBodyWithoutHeader) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Header()["Content-Length"] = []string{"-1"} - fmt.Fprintf(w, "this is a test") + _, _ = fmt.Fprintf(w, "this is a test") }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -1430,7 +1439,7 @@ func (h *httpCLBodyWithHeader) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Header()["Content-Length"] = []string{"50000"} - fmt.Fprintf(w, "this is a test") + _, _ = fmt.Fprintf(w, "this is a test") }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -1449,7 +1458,7 @@ type ConstantWithCliVar struct{} func (h *ConstantWithCliVar) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprint(w, r.URL.Query().Get("p")) + _, _ = fmt.Fprint(w, r.URL.Query().Get("p")) }) ts := httptest.NewTLSServer(router) defer ts.Close() @@ -1486,10 +1495,10 @@ type httpDisablePathAutomerge struct{} func (h *httpDisablePathAutomerge) Execute(filePath string) error { router := httprouter.New() router.GET("/api/v1/test", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprint(w, r.URL.Query().Get("id")) + _, _ = fmt.Fprint(w, r.URL.Query().Get("id")) }) router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprint(w, "empty path in raw request") + _, _ = fmt.Fprint(w, "empty path in raw request") }) ts := httptest.NewServer(router) @@ -1523,10 +1532,10 @@ func (h *httpPreprocessor) Execute(filePath string) error { value := r.URL.RequestURI() if re.MatchString(value) { w.WriteHeader(http.StatusOK) - fmt.Fprint(w, "ok") + _, _ = fmt.Fprint(w, "ok") } else { w.WriteHeader(http.StatusBadRequest) - fmt.Fprint(w, "not ok") + _, _ = fmt.Fprint(w, "not ok") } }) ts := httptest.NewServer(router) @@ -1547,11 +1556,11 @@ func (h *httpMultiRequest) Execute(filePath string) error { router := httprouter.New() router.GET("/ping", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.WriteHeader(http.StatusOK) - fmt.Fprint(w, "ping") + _, _ = fmt.Fprint(w, "ping") }) router.GET("/pong", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.WriteHeader(http.StatusOK) - fmt.Fprint(w, "pong") + _, _ = fmt.Fprint(w, "pong") }) ts := httptest.NewServer(router) defer ts.Close() diff --git a/cmd/integration-test/integration-test.go b/cmd/integration-test/integration-test.go index a35d7f92a..27ae9c69c 100644 --- a/cmd/integration-test/integration-test.go +++ b/cmd/integration-test/integration-test.go @@ -89,7 +89,9 @@ func main() { // start fuzz playground server defer fuzzplayground.Cleanup() server := fuzzplayground.GetPlaygroundServer() - defer server.Close() + defer func() { + _ = server.Close() + }() go func() { if err := server.Start("localhost:8082"); err != nil { if !strings.Contains(err.Error(), "Server closed") { diff --git a/cmd/integration-test/library.go b/cmd/integration-test/library.go index 54e5a903a..b9224edf6 100644 --- a/cmd/integration-test/library.go +++ b/cmd/integration-test/library.go @@ -48,9 +48,9 @@ func (h *goIntegrationTest) Execute(templatePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") if strings.EqualFold(r.Header.Get("test"), "nuclei") { - fmt.Fprintf(w, "This is test headers matcher text") + _, _ = fmt.Fprintf(w, "This is test headers matcher text") } }) ts := httptest.NewServer(router) diff --git a/cmd/integration-test/loader.go b/cmd/integration-test/loader.go index 8e5ea40ff..d1114ef33 100644 --- a/cmd/integration-test/loader.go +++ b/cmd/integration-test/loader.go @@ -31,9 +31,9 @@ func (h *remoteTemplateList) Execute(templateList string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") if strings.EqualFold(r.Header.Get("test"), "nuclei") { - fmt.Fprintf(w, "This is test headers matcher text") + _, _ = fmt.Fprintf(w, "This is test headers matcher text") } }) @@ -55,7 +55,9 @@ func (h *remoteTemplateList) Execute(templateList string) error { if err != nil { return err } - defer os.Remove("test-config.yaml") + defer func() { + _ = os.Remove("test-config.yaml") + }() results, err := testutils.RunNucleiBareArgsAndGetResults(debug, nil, "-target", ts.URL, "-template-url", ts.URL+"/template_list", "-config", "test-config.yaml") if err != nil { @@ -72,9 +74,9 @@ func (h *excludedTemplate) Execute(templateList string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") if strings.EqualFold(r.Header.Get("test"), "nuclei") { - fmt.Fprintf(w, "This is test headers matcher text") + _, _ = fmt.Fprintf(w, "This is test headers matcher text") } }) ts := httptest.NewServer(router) @@ -95,9 +97,9 @@ func (h *remoteTemplateListNotAllowed) Execute(templateList string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") if strings.EqualFold(r.Header.Get("test"), "nuclei") { - fmt.Fprintf(w, "This is test headers matcher text") + _, _ = fmt.Fprintf(w, "This is test headers matcher text") } }) @@ -130,9 +132,9 @@ func (h *remoteWorkflowList) Execute(workflowList string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") if strings.EqualFold(r.Header.Get("test"), "nuclei") { - fmt.Fprintf(w, "This is test headers matcher text") + _, _ = fmt.Fprintf(w, "This is test headers matcher text") } }) @@ -154,7 +156,9 @@ func (h *remoteWorkflowList) Execute(workflowList string) error { if err != nil { return err } - defer os.Remove("test-config.yaml") + defer func() { + _ = os.Remove("test-config.yaml") + }() results, err := testutils.RunNucleiBareArgsAndGetResults(debug, nil, "-target", ts.URL, "-workflow-url", ts.URL+"/workflow_list", "-config", "test-config.yaml") if err != nil { @@ -177,7 +181,9 @@ func (h *nonExistentTemplateList) Execute(nonExistingTemplateList string) error if err != nil { return err } - defer os.Remove("test-config.yaml") + defer func() { + _ = os.Remove("test-config.yaml") + }() _, err = testutils.RunNucleiBareArgsAndGetResults(debug, nil, "-target", ts.URL, "-template-url", ts.URL+"/404", "-config", "test-config.yaml") if err == nil { @@ -200,7 +206,9 @@ func (h *nonExistentWorkflowList) Execute(nonExistingWorkflowList string) error if err != nil { return err } - defer os.Remove("test-config.yaml") + defer func() { + _ = os.Remove("test-config.yaml") + }() _, err = testutils.RunNucleiBareArgsAndGetResults(debug, nil, "-target", ts.URL, "-workflow-url", ts.URL+"/404", "-config", "test-config.yaml") if err == nil { diff --git a/cmd/integration-test/network.go b/cmd/integration-test/network.go index 2e0ff0f26..9658fc49f 100644 --- a/cmd/integration-test/network.go +++ b/cmd/integration-test/network.go @@ -33,7 +33,9 @@ func (h *networkBasic) Execute(filePath string) error { var routerErr error ts := testutils.NewTCPServer(nil, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data, err := reader.ConnReadNWithTimeout(conn, 4, time.Duration(5)*time.Second) if err != nil { @@ -68,7 +70,9 @@ func (h *networkMultiStep) Execute(filePath string) error { var routerErr error ts := testutils.NewTCPServer(nil, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data, err := reader.ConnReadNWithTimeout(conn, 5, time.Duration(5)*time.Second) if err != nil { @@ -114,7 +118,9 @@ type networkRequestSelContained struct{} // Execute executes a test case and returns an error if occurred func (h *networkRequestSelContained) Execute(filePath string) error { ts := testutils.NewTCPServer(nil, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() _, _ = conn.Write([]byte("Authentication successful")) }) @@ -134,7 +140,9 @@ func (h *networkVariables) Execute(filePath string) error { var routerErr error ts := testutils.NewTCPServer(nil, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data, err := reader.ConnReadNWithTimeout(conn, 4, time.Duration(5)*time.Second) if err != nil { @@ -162,7 +170,9 @@ type networkPort struct{} func (n *networkPort) Execute(filePath string) error { ts := testutils.NewTCPServer(nil, 23846, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data, err := reader.ConnReadNWithTimeout(conn, 4, time.Duration(5)*time.Second) if err != nil { @@ -195,7 +205,9 @@ func (n *networkPort) Execute(filePath string) error { // this is positive test case where we expect port to be overridden and 34567 to be used ts2 := testutils.NewTCPServer(nil, 34567, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data, err := reader.ConnReadNWithTimeout(conn, 4, time.Duration(5)*time.Second) if err != nil { diff --git a/cmd/integration-test/ssl.go b/cmd/integration-test/ssl.go index de7a91a94..c824dec68 100644 --- a/cmd/integration-test/ssl.go +++ b/cmd/integration-test/ssl.go @@ -21,7 +21,9 @@ type sslBasic struct{} // Execute executes a test case and returns an error if occurred func (h *sslBasic) Execute(filePath string) error { ts := testutils.NewTCPServer(&tls.Config{}, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data := make([]byte, 4) if _, err := conn.Read(data); err != nil { return @@ -42,7 +44,9 @@ type sslBasicZtls struct{} // Execute executes a test case and returns an error if occurred func (h *sslBasicZtls) Execute(filePath string) error { ts := testutils.NewTCPServer(&tls.Config{}, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data := make([]byte, 4) if _, err := conn.Read(data); err != nil { return @@ -63,7 +67,9 @@ type sslCustomCipher struct{} // Execute executes a test case and returns an error if occurred func (h *sslCustomCipher) Execute(filePath string) error { ts := testutils.NewTCPServer(&tls.Config{CipherSuites: []uint16{tls.TLS_AES_128_GCM_SHA256}}, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data := make([]byte, 4) if _, err := conn.Read(data); err != nil { return @@ -84,7 +90,9 @@ type sslCustomVersion struct{} // Execute executes a test case and returns an error if occurred func (h *sslCustomVersion) Execute(filePath string) error { ts := testutils.NewTCPServer(&tls.Config{MinVersion: tls.VersionTLS12, MaxVersion: tls.VersionTLS12}, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data := make([]byte, 4) if _, err := conn.Read(data); err != nil { return @@ -104,7 +112,9 @@ type sslWithVars struct{} func (h *sslWithVars) Execute(filePath string) error { ts := testutils.NewTCPServer(&tls.Config{}, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data := make([]byte, 4) if _, err := conn.Read(data); err != nil { return @@ -128,7 +138,9 @@ func (h *sslMultiReq) Execute(filePath string) error { MinVersion: tls.VersionSSL30, MaxVersion: tls.VersionTLS11, }, defaultStaticPort, func(conn net.Conn) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() data := make([]byte, 4) if _, err := conn.Read(data); err != nil { return diff --git a/cmd/integration-test/template-dir.go b/cmd/integration-test/template-dir.go index 2c60cc60c..20691da04 100644 --- a/cmd/integration-test/template-dir.go +++ b/cmd/integration-test/template-dir.go @@ -19,7 +19,9 @@ func (h *templateDirWithTargetTest) Execute(filePath string) error { if err != nil { return errorutil.NewWithErr(err).Msgf("failed to create temp dir") } - defer os.RemoveAll(tempdir) + defer func() { + _ = os.RemoveAll(tempdir) + }() results, err := testutils.RunNucleiTemplateAndGetResults(filePath, "8x8exch02.8x8.com", debug, "-ud", tempdir) if err != nil { diff --git a/cmd/integration-test/workflow.go b/cmd/integration-test/workflow.go index 442e5169f..3032e8b59 100644 --- a/cmd/integration-test/workflow.go +++ b/cmd/integration-test/workflow.go @@ -62,7 +62,7 @@ type workflowBasic struct{} func (h *workflowBasic) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -81,7 +81,7 @@ type workflowConditionMatched struct{} func (h *workflowConditionMatched) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -100,7 +100,7 @@ type workflowConditionUnmatch struct{} func (h *workflowConditionUnmatch) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -119,7 +119,7 @@ type workflowMatcherName struct{} func (h *workflowMatcherName) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -138,7 +138,7 @@ type workflowComplexConditions struct{} func (h *workflowComplexConditions) Execute(filePath string) error { router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) ts := httptest.NewServer(router) defer ts.Close() @@ -162,11 +162,11 @@ type workflowHttpKeyValueShare struct{} func (h *workflowHttpKeyValueShare) Execute(filePath string) error { router := httprouter.New() router.GET("/path1", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "href=\"test-value\"") + _, _ = fmt.Fprintf(w, "href=\"test-value\"") }) router.GET("/path2", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { body, _ := io.ReadAll(r.Body) - fmt.Fprintf(w, "%s", body) + _, _ = fmt.Fprintf(w, "%s", body) }) ts := httptest.NewServer(router) defer ts.Close() @@ -214,11 +214,11 @@ func (h *workflowMultiProtocolKeyValueShare) Execute(filePath string) error { router := httprouter.New() // the response of path1 contains a domain that will be extracted and shared with the second template router.GET("/path1", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "href=\"blog.projectdiscovery.io\"") + _, _ = fmt.Fprintf(w, "href=\"blog.projectdiscovery.io\"") }) // path2 responds with the value of the "extracted" query parameter, e.g.: /path2?extracted=blog.projectdiscovery.io => blog.projectdiscovery.io router.GET("/path2", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "%s", r.URL.Query().Get("extracted")) + _, _ = fmt.Fprintf(w, "%s", r.URL.Query().Get("extracted")) }) ts := httptest.NewServer(router) defer ts.Close() @@ -238,15 +238,15 @@ func (h *workflowMultiMatchKeyValueShare) Execute(filePath string) error { var receivedData []string router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "This is test matcher text") + _, _ = fmt.Fprintf(w, "This is test matcher text") }) router.GET("/path1", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { - fmt.Fprintf(w, "href=\"test-value-%s\"", r.URL.Query().Get("v")) + _, _ = fmt.Fprintf(w, "href=\"test-value-%s\"", r.URL.Query().Get("v")) }) router.GET("/path2", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { body, _ := io.ReadAll(r.Body) receivedData = append(receivedData, string(body)) - fmt.Fprintf(w, "test-value") + _, _ = fmt.Fprintf(w, "test-value") }) ts := httptest.NewServer(router) defer ts.Close() diff --git a/cmd/nuclei/main.go b/cmd/nuclei/main.go index 2eb542795..e9643fba7 100644 --- a/cmd/nuclei/main.go +++ b/cmd/nuclei/main.go @@ -141,8 +141,8 @@ func main() { } pprof.StopCPUProfile() - memProfileFile.Close() - traceFile.Close() + _ = memProfileFile.Close() + _ = traceFile.Close() trace.Stop() runtime.MemProfileRate = oldMemProfileRate @@ -228,7 +228,7 @@ func main() { nucleiRunner.Close() // on successful execution remove the resume file in case it exists if fileutil.FileExists(resumeFileName) { - os.Remove(resumeFileName) + _ = os.Remove(resumeFileName) } } diff --git a/cmd/tmc/main.go b/cmd/tmc/main.go index 521929c75..7b86d27c7 100644 --- a/cmd/tmc/main.go +++ b/cmd/tmc/main.go @@ -135,7 +135,9 @@ func process(opts options) error { if err != nil { return err } - defer os.RemoveAll(tempDir) + defer func() { + _ = os.RemoveAll(tempDir) + }() var errFile *os.File if opts.errorLogFile != "" { @@ -143,7 +145,9 @@ func process(opts options) error { if err != nil { gologger.Fatal().Msgf("could not open error log file: %s\n", err) } - defer errFile.Close() + defer func() { + _ = errFile.Close() + }() } templateCatalog := disk.NewCatalog(filepath.Dir(opts.input)) @@ -226,7 +230,7 @@ func logErrMsg(path string, err error, debug bool, errFile *os.File) string { msg = fmt.Sprintf("❌ template: %s err: %s\n", path, err) } if errFile != nil { - _, _ = errFile.WriteString(fmt.Sprintf("❌ template: %s err: %s\n", path, err)) + _, _ = fmt.Fprintf(errFile, "❌ template: %s err: %s\n", path, err) } return msg } diff --git a/cmd/tools/fuzzplayground/main.go b/cmd/tools/fuzzplayground/main.go index 0ab764e8b..b65d99ed2 100644 --- a/cmd/tools/fuzzplayground/main.go +++ b/cmd/tools/fuzzplayground/main.go @@ -18,7 +18,9 @@ func main() { defer fuzzplayground.Cleanup() server := fuzzplayground.GetPlaygroundServer() - defer server.Close() + defer func() { + _ = server.Close() + }() // Start the server if err := server.Start(addr); err != nil { diff --git a/examples/with_speed_control/main.go b/examples/with_speed_control/main.go index b56df967c..af04e3c01 100644 --- a/examples/with_speed_control/main.go +++ b/examples/with_speed_control/main.go @@ -34,6 +34,7 @@ func main() { } func initializeNucleiEngine() (*nuclei.NucleiEngine, error) { + //nolint return nuclei.NewNucleiEngine( nuclei.WithTemplateFilters(nuclei.TemplateFilters{Tags: []string{"oast"}}), nuclei.EnableStatsWithOpts(nuclei.StatsOptions{MetricServerPort: 6064}), diff --git a/internal/pdcp/writer.go b/internal/pdcp/writer.go index e4e8e25bb..962c909d0 100644 --- a/internal/pdcp/writer.go +++ b/internal/pdcp/writer.go @@ -127,8 +127,10 @@ func (u *UploadWriter) autoCommit(ctx context.Context, r *io.PipeReader) { // continuously read from the reader and send to channel go func() { - defer r.Close() - defer close(ch) + defer func() { + _ = r.Close() + close(ch) + }() for { data, err := reader.ReadString('\n') if err != nil { @@ -213,7 +215,9 @@ func (u *UploadWriter) upload(data []byte) error { if err != nil { return errorutil.NewWithErr(err).Msgf("could not upload results") } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() bin, err := io.ReadAll(resp.Body) if err != nil { return errorutil.NewWithErr(err).Msgf("could not get id from response") @@ -251,12 +255,12 @@ func (u *UploadWriter) getRequest(bin []byte) (*retryablehttp.Request, error) { return nil, errorutil.NewWithErr(err).Msgf("could not create cloud upload request") } // add pdtm meta params - req.URL.Params.Merge(updateutils.GetpdtmParams(config.Version)) + req.Params.Merge(updateutils.GetpdtmParams(config.Version)) // if it is upload endpoint also include name if it exists - if u.scanName != "" && req.URL.Path == uploadEndpoint { - req.URL.Params.Add("name", u.scanName) + if u.scanName != "" && req.Path == uploadEndpoint { + req.Params.Add("name", u.scanName) } - req.URL.Update() + req.Update() req.Header.Set(pdcpauth.ApiKeyHeaderName, u.creds.APIKey) if u.TeamID != NoneTeamID && u.TeamID != "" { diff --git a/internal/runner/healthcheck.go b/internal/runner/healthcheck.go index da85bd5a4..627b55cb1 100644 --- a/internal/runner/healthcheck.go +++ b/internal/runner/healthcheck.go @@ -47,7 +47,7 @@ func DoHealthCheck(options *types.Options) string { } c4, err := net.Dial("tcp4", "scanme.sh:80") if err == nil && c4 != nil { - c4.Close() + _ = c4.Close() } testResult = "Ok" if err != nil { @@ -56,7 +56,7 @@ func DoHealthCheck(options *types.Options) string { test.WriteString(fmt.Sprintf("IPv4 connectivity to scanme.sh:80 => %s\n", testResult)) c6, err := net.Dial("tcp6", "scanme.sh:80") if err == nil && c6 != nil { - c6.Close() + _ = c6.Close() } testResult = "Ok" if err != nil { @@ -65,7 +65,7 @@ func DoHealthCheck(options *types.Options) string { test.WriteString(fmt.Sprintf("IPv6 connectivity to scanme.sh:80 => %s\n", testResult)) u4, err := net.Dial("udp4", "scanme.sh:53") if err == nil && u4 != nil { - u4.Close() + _ = u4.Close() } testResult = "Ok" if err != nil { diff --git a/internal/runner/options.go b/internal/runner/options.go index 13135b99c..e5394c974 100644 --- a/internal/runner/options.go +++ b/internal/runner/options.go @@ -121,7 +121,7 @@ func ParseOptions(options *types.Options) { // Set GitHub token in env variable. runner.getGHClientWithToken() reads token from env if options.GitHubToken != "" && os.Getenv("GITHUB_TOKEN") != options.GitHubToken { - os.Setenv("GITHUB_TOKEN", options.GitHubToken) + _ = os.Setenv("GITHUB_TOKEN", options.GitHubToken) } if options.UncoverQuery != nil { @@ -303,7 +303,9 @@ func createReportingOptions(options *types.Options) (*reporting.Options, error) if err != nil { return nil, errors.Wrap(err, "could not open reporting config file") } - defer file.Close() + defer func() { + _ = file.Close() + }() if err := yaml.DecodeAndValidate(file, reportingOptions); err != nil { return nil, errors.Wrap(err, "could not parse reporting config file") @@ -380,7 +382,9 @@ func loadResolvers(options *types.Options) { if err != nil { gologger.Fatal().Msgf("Could not open resolvers file: %s\n", err) } - defer file.Close() + defer func() { + _ = file.Close() + }() scanner := bufio.NewScanner(file) for scanner.Scan() { diff --git a/internal/runner/proxy.go b/internal/runner/proxy.go index 6160f5481..0f04df265 100644 --- a/internal/runner/proxy.go +++ b/internal/runner/proxy.go @@ -30,7 +30,9 @@ func loadProxyServers(options *types.Options) error { if err != nil { return fmt.Errorf("could not open proxy file: %w", err) } - defer file.Close() + defer func() { + _ = file.Close() + }() scanner := bufio.NewScanner(file) for scanner.Scan() { proxy := scanner.Text() @@ -52,12 +54,13 @@ func loadProxyServers(options *types.Options) error { return errorutil.WrapfWithNil(err, "failed to parse proxy got %v", err) } if options.ProxyInternal { - os.Setenv(HTTP_PROXY_ENV, proxyURL.String()) + _ = os.Setenv(HTTP_PROXY_ENV, proxyURL.String()) } - if proxyURL.Scheme == proxyutils.HTTP || proxyURL.Scheme == proxyutils.HTTPS { + switch proxyURL.Scheme { + case proxyutils.HTTP, proxyutils.HTTPS: gologger.Verbose().Msgf("Using %s as proxy server", proxyURL.String()) options.AliveHttpProxy = proxyURL.String() - } else if proxyURL.Scheme == proxyutils.SOCKS5 { + case proxyutils.SOCKS5: options.AliveSocksProxy = proxyURL.String() gologger.Verbose().Msgf("Using %s as socket proxy server", proxyURL.String()) } diff --git a/internal/runner/runner.go b/internal/runner/runner.go index 79d861363..0f82aeb87 100644 --- a/internal/runner/runner.go +++ b/internal/runner/runner.go @@ -439,6 +439,7 @@ func (r *Runner) setupPDCPUpload(writer output.Writer) output.Writer { if r.options.ScanID != "" { r.options.EnableCloudUpload = true } + //nolint if !(r.options.EnableCloudUpload || EnableCloudUpload) { r.pdcpUploadErrMsg = fmt.Sprintf("[%v] Scan results upload to cloud is disabled.", r.colorizer.BrightYellow("WRN")) return writer @@ -940,7 +941,9 @@ func UploadResultsToCloud(options *types.Options) error { if err != nil { return errors.Wrap(err, "could not open scan upload file") } - defer file.Close() + defer func() { + _ = file.Close() + }() gologger.Info().Msgf("Uploading scan results to cloud dashboard from %s", options.ScanUploadFile) dec := json.NewDecoder(file) diff --git a/internal/runner/runner_test.go b/internal/runner/runner_test.go index 5fc89ae0a..60b3df9d5 100644 --- a/internal/runner/runner_test.go +++ b/internal/runner/runner_test.go @@ -64,8 +64,8 @@ func TestWalkReflectStructAssignsEnvVars(t *testing.T) { B: "$VAR_TWO", }, } - os.Setenv("VAR_EXAMPLE", "value") - os.Setenv("VAR_TWO", "value2") + _ = os.Setenv("VAR_EXAMPLE", "value") + _ = os.Setenv("VAR_TWO", "value2") Walk(testStruct, expandEndVars) @@ -79,9 +79,9 @@ func TestWalkReflectStructHandlesDifferentTypes(t *testing.T) { B: "$VAR_TWO", C: "$VAR_THREE", } - os.Setenv("VAR_EXAMPLE", "value") - os.Setenv("VAR_TWO", "2") - os.Setenv("VAR_THREE", "true") + _ = os.Setenv("VAR_EXAMPLE", "value") + _ = os.Setenv("VAR_TWO", "2") + _ = os.Setenv("VAR_THREE", "true") Walk(testStruct, expandEndVars) @@ -96,9 +96,9 @@ func TestWalkReflectStructEmpty(t *testing.T) { B: "", C: "$VAR_THREE", } - os.Setenv("VAR_EXAMPLE", "value") - os.Setenv("VAR_TWO", "2") - os.Setenv("VAR_THREE", "true") + _ = os.Setenv("VAR_EXAMPLE", "value") + _ = os.Setenv("VAR_TWO", "2") + _ = os.Setenv("VAR_THREE", "true") Walk(testStruct, expandEndVars) @@ -116,7 +116,7 @@ func TestWalkReflectStructWithNoYamlTag(t *testing.T) { C: "$GITHUB_USER", } - os.Setenv("GITHUB_USER", "testuser") + _ = os.Setenv("GITHUB_USER", "testuser") Walk(test, expandEndVars) require.Equal(t, "testuser", test.A) @@ -132,9 +132,9 @@ func TestWalkReflectStructHandlesNestedStructs(t *testing.T) { C: "$VAR_THREE", }, } - os.Setenv("VAR_EXAMPLE", "value") - os.Setenv("VAR_TWO", "2") - os.Setenv("VAR_THREE", "true") + _ = os.Setenv("VAR_EXAMPLE", "value") + _ = os.Setenv("VAR_TWO", "2") + _ = os.Setenv("VAR_THREE", "true") Walk(testStruct, expandEndVars) diff --git a/internal/server/server.go b/internal/server/server.go index 259923272..9e297fce2 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -125,7 +125,7 @@ func NewStatsServer(fuzzStatsDB *stats.Tracker) (*DASTServer, error) { func (s *DASTServer) Close() { s.nucleiExecutor.Close() - s.echo.Close() + _ = s.echo.Close() s.tasksPool.StopAndWaitFor(1 * time.Minute) } diff --git a/pkg/authprovider/authx/dynamic.go b/pkg/authprovider/authx/dynamic.go index 0efee1ea6..9f917706c 100644 --- a/pkg/authprovider/authx/dynamic.go +++ b/pkg/authprovider/authx/dynamic.go @@ -43,8 +43,8 @@ func (d *Dynamic) GetDomainAndDomainRegex() ([]string, []string) { domainRegex = append(domainRegex, secret.DomainsRegex...) } if d.Secret != nil { - domains = append(domains, d.Secret.Domains...) - domainRegex = append(domainRegex, d.Secret.DomainsRegex...) + domains = append(domains, d.Domains...) + domainRegex = append(domainRegex, d.DomainsRegex...) } uniqueDomains := sliceutil.Dedupe(domains) uniqueDomainRegex := sliceutil.Dedupe(domainRegex) @@ -74,7 +74,7 @@ func (d *Dynamic) Validate() error { } if d.Secret != nil { - d.Secret.skipCookieParse = true // skip cookie parsing in dynamic secrets during validation + d.skipCookieParse = true // skip cookie parsing in dynamic secrets during validation if err := d.Secret.Validate(); err != nil { return err } @@ -187,7 +187,7 @@ func (d *Dynamic) GetStrategies() []AuthStrategy { } var strategies []AuthStrategy if d.Secret != nil { - strategies = append(strategies, d.Secret.GetStrategy()) + strategies = append(strategies, d.GetStrategy()) } for _, secret := range d.Secrets { strategies = append(strategies, secret.GetStrategy()) diff --git a/pkg/catalog/config/ignorefile.go b/pkg/catalog/config/ignorefile.go index b8a03544f..14c0ec30f 100644 --- a/pkg/catalog/config/ignorefile.go +++ b/pkg/catalog/config/ignorefile.go @@ -20,7 +20,9 @@ func ReadIgnoreFile() IgnoreFile { gologger.Error().Msgf("Could not read nuclei-ignore file: %s\n", err) return IgnoreFile{} } - defer file.Close() + defer func() { + _ = file.Close() + }() ignore := IgnoreFile{} if err := yaml.NewDecoder(file).Decode(&ignore); err != nil { diff --git a/pkg/catalog/config/template.go b/pkg/catalog/config/template.go index c35bef664..ecb93e283 100644 --- a/pkg/catalog/config/template.go +++ b/pkg/catalog/config/template.go @@ -74,7 +74,9 @@ func getTemplateID(filePath string) (string, error) { return "", err } - defer file.Close() + defer func() { + _ = file.Close() + }() return GetTemplateIDFromReader(file, filePath) } diff --git a/pkg/catalog/loader/ai_loader.go b/pkg/catalog/loader/ai_loader.go index 64af39939..ce12e90b1 100644 --- a/pkg/catalog/loader/ai_loader.go +++ b/pkg/catalog/loader/ai_loader.go @@ -117,7 +117,9 @@ func generateAITemplate(prompt string) (string, string, error) { if err != nil { return "", "", errorutil.New("Failed to send HTTP request: %v", err) } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() if resp.StatusCode == http.StatusUnauthorized { return "", "", errorutil.New("Invalid API Key or API Key not configured, Create one for free at https://cloud.projectdiscovery.io/") diff --git a/pkg/catalog/loader/loader.go b/pkg/catalog/loader/loader.go index aa724d02c..bf0dffa9b 100644 --- a/pkg/catalog/loader/loader.go +++ b/pkg/catalog/loader/loader.go @@ -239,7 +239,9 @@ func (store *Store) ReadTemplateFromURI(uri string, remote bool) ([]byte, error) if err != nil { return nil, err } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() return io.ReadAll(resp.Body) } else { return os.ReadFile(uri) diff --git a/pkg/catalog/loader/remote_loader.go b/pkg/catalog/loader/remote_loader.go index 898ca37d9..4b27b6b01 100644 --- a/pkg/catalog/loader/remote_loader.go +++ b/pkg/catalog/loader/remote_loader.go @@ -49,9 +49,10 @@ func getRemoteTemplatesAndWorkflows(templateURLs, workflowURLs, remoteTemplateDo err = remoteContent.Error } } else { - if remoteContent.Type == Template { + switch remoteContent.Type { + case Template: remoteTemplateList = append(remoteTemplateList, remoteContent.Content...) - } else if remoteContent.Type == Workflow { + case Workflow: remoteWorkFlowList = append(remoteWorkFlowList, remoteContent.Content...) } } @@ -80,7 +81,9 @@ func getRemoteContent(URL string, remoteTemplateDomainList []string, remoteConte } return } - defer response.Body.Close() + defer func() { + _ = response.Body.Close() + }() if response.StatusCode < 200 || response.StatusCode > 299 { remoteContentChannel <- RemoteContent{ Error: fmt.Errorf("get \"%s\": unexpect status %d", URL, response.StatusCode), diff --git a/pkg/external/customtemplates/s3.go b/pkg/external/customtemplates/s3.go index 1b14206e3..29bb465fd 100644 --- a/pkg/external/customtemplates/s3.go +++ b/pkg/external/customtemplates/s3.go @@ -96,7 +96,9 @@ func downloadToFile(downloader *manager.Downloader, targetDirectory, bucket, key if err != nil { return err } - defer fd.Close() + defer func() { + _ = fd.Close() + }() // Download the file using the AWS SDK for Go _, err = downloader.Download(context.TODO(), fd, &s3.GetObjectInput{Bucket: &bucket, Key: &key}) diff --git a/pkg/fuzz/analyzers/time/analyzer.go b/pkg/fuzz/analyzers/time/analyzer.go index cdf40e6bf..e0710d5e6 100644 --- a/pkg/fuzz/analyzers/time/analyzer.go +++ b/pkg/fuzz/analyzers/time/analyzer.go @@ -123,7 +123,7 @@ func (a *Analyzer) Analyze(options *analyzers.Options) (bool, string, error) { if err != nil { return 0, errors.Wrap(err, "could not rebuild request") } - gologger.Verbose().Msgf("[%s] Sending request with %d delay for: %s", a.Name(), delay, rebuilt.URL.String()) + gologger.Verbose().Msgf("[%s] Sending request with %d delay for: %s", a.Name(), delay, rebuilt.String()) timeTaken, err := doHTTPRequestWithTimeTracing(rebuilt, options.HttpClient) if err != nil { diff --git a/pkg/fuzz/analyzers/time/time_delay.go b/pkg/fuzz/analyzers/time/time_delay.go index 6ee46bf9e..d37b83e7c 100644 --- a/pkg/fuzz/analyzers/time/time_delay.go +++ b/pkg/fuzz/analyzers/time/time_delay.go @@ -60,11 +60,7 @@ func checkTimingDependency( requestsLeft := requestsLimit var requestsSent []requestsSentMetadata - for { - if requestsLeft <= 0 { - break - } - + for requestsLeft > 0 { isCorrelationPossible, delayRecieved, err := sendRequestAndTestConfidence(regression, highSleepTimeSeconds, requestSender, baselineDelay) if err != nil { return false, "", err diff --git a/pkg/fuzz/component/path.go b/pkg/fuzz/component/path.go index ec9ab5d03..e77429c19 100644 --- a/pkg/fuzz/component/path.go +++ b/pkg/fuzz/component/path.go @@ -36,7 +36,7 @@ func (q *Path) Parse(req *retryablehttp.Request) (bool, error) { q.req = req q.value = NewValue("") - splitted := strings.Split(req.URL.Path, "/") + splitted := strings.Split(req.Path, "/") values := make(map[string]interface{}) for i := range splitted { pathTillNow := strings.Join(splitted[:i+1], "/") @@ -83,7 +83,7 @@ func (q *Path) Delete(key string) error { // component rebuilt func (q *Path) Rebuild() (*retryablehttp.Request, error) { originalValues := mapsutil.Map[string, any]{} - splitted := strings.Split(q.req.URL.Path, "/") + splitted := strings.Split(q.req.Path, "/") for i := range splitted { pathTillNow := strings.Join(splitted[:i+1], "/") if pathTillNow == "" { @@ -92,7 +92,7 @@ func (q *Path) Rebuild() (*retryablehttp.Request, error) { originalValues[strconv.Itoa(i)] = pathTillNow } - originalPath := q.req.URL.Path + originalPath := q.req.Path lengthSplitted := len(q.value.parsed.Map) for i := lengthSplitted; i > 0; i-- { key := strconv.Itoa(i) @@ -120,7 +120,7 @@ func (q *Path) Rebuild() (*retryablehttp.Request, error) { // Clone the request and update the path cloned := q.req.Clone(context.Background()) if err := cloned.UpdateRelPath(rebuiltPath, true); err != nil { - cloned.URL.RawPath = rebuiltPath + cloned.RawPath = rebuiltPath } return cloned, nil } diff --git a/pkg/fuzz/component/path_test.go b/pkg/fuzz/component/path_test.go index c47f81f4f..bf1f2f2aa 100644 --- a/pkg/fuzz/component/path_test.go +++ b/pkg/fuzz/component/path_test.go @@ -40,8 +40,8 @@ func TestURLComponent(t *testing.T) { if err != nil { t.Fatal(err) } - require.Equal(t, "/newpath", rebuilt.URL.Path, "unexpected URL path") - require.Equal(t, "https://example.com/newpath", rebuilt.URL.String(), "unexpected full URL") + require.Equal(t, "/newpath", rebuilt.Path, "unexpected URL path") + require.Equal(t, "https://example.com/newpath", rebuilt.String(), "unexpected full URL") } func TestURLComponent_NestedPaths(t *testing.T) { @@ -74,7 +74,7 @@ func TestURLComponent_NestedPaths(t *testing.T) { if err != nil { t.Fatal(err) } - if newReq.URL.Path != "/user/753'/profile" { + if newReq.Path != "/user/753'/profile" { t.Fatal("expected path to be modified") } } diff --git a/pkg/fuzz/component/query.go b/pkg/fuzz/component/query.go index 571161ee1..0fb7ba7cf 100644 --- a/pkg/fuzz/component/query.go +++ b/pkg/fuzz/component/query.go @@ -84,7 +84,7 @@ func (q *Query) Rebuild() (*retryablehttp.Request, error) { return nil, errors.Wrap(err, "could not encode query") } cloned := q.req.Clone(context.Background()) - cloned.URL.RawQuery = encoded + cloned.RawQuery = encoded // Clear the query parameters and re-add them cloned.Params = nil diff --git a/pkg/fuzz/component/query_test.go b/pkg/fuzz/component/query_test.go index 48fe5aa26..00d93c69d 100644 --- a/pkg/fuzz/component/query_test.go +++ b/pkg/fuzz/component/query_test.go @@ -41,6 +41,6 @@ func TestQueryComponent(t *testing.T) { t.Fatal(err) } - require.Equal(t, "foo=baz", rebuilt.URL.RawQuery, "unexpected query string") - require.Equal(t, "https://example.com?foo=baz", rebuilt.URL.String(), "unexpected url") + require.Equal(t, "foo=baz", rebuilt.RawQuery, "unexpected query string") + require.Equal(t, "https://example.com?foo=baz", rebuilt.String(), "unexpected url") } diff --git a/pkg/fuzz/dataformat/multipart.go b/pkg/fuzz/dataformat/multipart.go index 227025d22..97af6207f 100644 --- a/pkg/fuzz/dataformat/multipart.go +++ b/pkg/fuzz/dataformat/multipart.go @@ -92,7 +92,7 @@ func (m *MultiPartForm) Encode(data KV) (string, error) { return "", Itererr } - w.Close() + _ = w.Close() return b.String(), nil } @@ -142,7 +142,9 @@ func (m *MultiPartForm) Decode(data string) (KV, error) { if err != nil { return KV{}, err } - defer file.Close() + defer func() { + _ = file.Close() + }() buffer := new(bytes.Buffer) if _, err := buffer.ReadFrom(file); err != nil { diff --git a/pkg/fuzz/execute.go b/pkg/fuzz/execute.go index ea4a3e0fb..17c3260ee 100644 --- a/pkg/fuzz/execute.go +++ b/pkg/fuzz/execute.go @@ -98,6 +98,7 @@ func (rule *Rule) Execute(input *ExecuteRuleInput) (err error) { // match rule part with component name displayDebugFuzzPoints := make(map[string]map[string]string) for _, componentName := range component.Components { + //nolint if !(rule.Part == componentName || sliceutil.Contains(rule.Parts, componentName) || rule.partType == requestPartType) { continue } diff --git a/pkg/fuzz/parts.go b/pkg/fuzz/parts.go index 59ac6e3ca..7d0b51afe 100644 --- a/pkg/fuzz/parts.go +++ b/pkg/fuzz/parts.go @@ -163,7 +163,7 @@ func (rule *Rule) execWithInput(input *ExecuteRuleInput, httpReq *retryablehttp. if rule.options.FuzzParamsFrequency != nil { if rule.options.FuzzParamsFrequency.IsParameterFrequent( parameter, - httpReq.URL.String(), + httpReq.String(), rule.options.TemplateID, ) { return nil diff --git a/pkg/fuzz/stats/stats.go b/pkg/fuzz/stats/stats.go index 87ed5c379..a6c7f9e12 100644 --- a/pkg/fuzz/stats/stats.go +++ b/pkg/fuzz/stats/stats.go @@ -96,9 +96,10 @@ func getCorrectSiteName(originalURL string) string { // Site is the host:port combo siteName := parsed.Host if parsed.Port() == "" { - if parsed.Scheme == "https" { + switch parsed.Scheme { + case "https": siteName = fmt.Sprintf("%s:443", siteName) - } else if parsed.Scheme == "http" { + case "http": siteName = fmt.Sprintf("%s:80", siteName) } } diff --git a/pkg/input/formats/burp/burp_test.go b/pkg/input/formats/burp/burp_test.go index 97e80c534..4245e505c 100644 --- a/pkg/input/formats/burp/burp_test.go +++ b/pkg/input/formats/burp/burp_test.go @@ -17,7 +17,9 @@ func TestBurpParse(t *testing.T) { file, err := os.Open(proxifyInputFile) require.Nilf(t, err, "error opening proxify input file: %v", err) - defer file.Close() + defer func() { + _ = file.Close() + }() err = format.Parse(file, func(request *types.RequestResponse) bool { gotMethodsToURLs = append(gotMethodsToURLs, request.URL.String()) diff --git a/pkg/input/formats/formats.go b/pkg/input/formats/formats.go index 03c65d3fe..a680888ae 100644 --- a/pkg/input/formats/formats.go +++ b/pkg/input/formats/formats.go @@ -88,7 +88,9 @@ func WriteOpenAPIVarDumpFile(vars *OpenAPIParamsCfgFile) error { if err != nil { return err } - defer f.Close() + defer func() { + _ = f.Close() + }() bin, err := yaml.Marshal(vars) if err != nil { return err diff --git a/pkg/input/formats/json/json_test.go b/pkg/input/formats/json/json_test.go index a6734f083..830385e21 100644 --- a/pkg/input/formats/json/json_test.go +++ b/pkg/input/formats/json/json_test.go @@ -44,7 +44,9 @@ func TestJSONFormatterParse(t *testing.T) { file, err := os.Open(proxifyInputFile) require.Nilf(t, err, "error opening proxify input file: %v", err) - defer file.Close() + defer func() { + _ = file.Close() + }() var urls []string err = format.Parse(file, func(request *types.RequestResponse) bool { diff --git a/pkg/input/formats/openapi/generator.go b/pkg/input/formats/openapi/generator.go index 9c44797dc..dfd880e65 100644 --- a/pkg/input/formats/openapi/generator.go +++ b/pkg/input/formats/openapi/generator.go @@ -217,7 +217,7 @@ func generateRequestsFromOp(opts *generateReqOptions) error { return nil } else { // if it is in path then remove it from path - opts.requestPath = strings.Replace(opts.requestPath, fmt.Sprintf("{%s}", value.Name), "", -1) + opts.requestPath = strings.ReplaceAll(opts.requestPath, fmt.Sprintf("{%s}", value.Name), "") if !opts.opts.RequiredOnly { gologger.Verbose().Msgf("openapi: skipping optional param (%s) in (%v) in request [%s] %s due to missing value (%v)\n", value.Name, value.In, opts.method, opts.requestPath, value.Name) } @@ -233,7 +233,7 @@ func generateRequestsFromOp(opts *generateReqOptions) error { return nil } else { // if it is in path then remove it from path - opts.requestPath = strings.Replace(opts.requestPath, fmt.Sprintf("{%s}", value.Name), "", -1) + opts.requestPath = strings.ReplaceAll(opts.requestPath, fmt.Sprintf("{%s}", value.Name), "") if !opts.opts.RequiredOnly { gologger.Verbose().Msgf("openapi: skipping optional param (%s) in (%v) in request [%s] %s due to missing value (%v)\n", value.Name, value.In, opts.method, opts.requestPath, value.Name) } @@ -244,7 +244,7 @@ func generateRequestsFromOp(opts *generateReqOptions) error { } if opts.requiredOnly && !value.Required { // remove them from path if any - opts.requestPath = strings.Replace(opts.requestPath, fmt.Sprintf("{%s}", value.Name), "", -1) + opts.requestPath = strings.ReplaceAll(opts.requestPath, fmt.Sprintf("{%s}", value.Name), "") continue // Skip this parameter if it is not required and we want only required ones } @@ -319,7 +319,7 @@ func generateRequestsFromOp(opts *generateReqOptions) error { _ = multipartWriter.WriteField(k, types.ToString(v)) } } - multipartWriter.Close() + _ = multipartWriter.Close() // body = buffer.String() cloned.Body = io.NopCloser(buffer) cloned.ContentLength = int64(len(buffer.Bytes())) diff --git a/pkg/input/formats/openapi/openapi_test.go b/pkg/input/formats/openapi/openapi_test.go index c202bdcbe..4f6b429e0 100644 --- a/pkg/input/formats/openapi/openapi_test.go +++ b/pkg/input/formats/openapi/openapi_test.go @@ -44,7 +44,9 @@ func TestOpenAPIParser(t *testing.T) { file, err := os.Open(proxifyInputFile) require.Nilf(t, err, "error opening proxify input file: %v", err) - defer file.Close() + defer func() { + _ = file.Close() + }() err = format.Parse(file, func(rr *types.RequestResponse) bool { gotMethodsToURLs[rr.Request.Method] = append(gotMethodsToURLs[rr.Request.Method], diff --git a/pkg/input/formats/swagger/swagger_test.go b/pkg/input/formats/swagger/swagger_test.go index caed82a13..c354e1a60 100644 --- a/pkg/input/formats/swagger/swagger_test.go +++ b/pkg/input/formats/swagger/swagger_test.go @@ -17,7 +17,9 @@ func TestSwaggerAPIParser(t *testing.T) { file, err := os.Open(proxifyInputFile) require.Nilf(t, err, "error opening proxify input file: %v", err) - defer file.Close() + defer func() { + _ = file.Close() + }() err = format.Parse(file, func(request *types.RequestResponse) bool { gotMethodsToURLs = append(gotMethodsToURLs, request.URL.String()) diff --git a/pkg/input/formats/yaml/multidoc_test.go b/pkg/input/formats/yaml/multidoc_test.go index 0b91e774a..efc7733ea 100644 --- a/pkg/input/formats/yaml/multidoc_test.go +++ b/pkg/input/formats/yaml/multidoc_test.go @@ -20,7 +20,9 @@ func TestYamlFormatterParse(t *testing.T) { file, err := os.Open(proxifyInputFile) require.Nilf(t, err, "error opening proxify input file: %v", err) - defer file.Close() + defer func() { + _ = file.Close() + }() var urls []string err = format.Parse(file, func(request *types.RequestResponse) bool { diff --git a/pkg/input/provider/http/multiformat.go b/pkg/input/provider/http/multiformat.go index c86a17b84..ee8cb6809 100644 --- a/pkg/input/provider/http/multiformat.go +++ b/pkg/input/provider/http/multiformat.go @@ -73,7 +73,7 @@ func NewHttpInputProvider(opts *HttpMultiFormatOptions) (*HttpInputProvider, err } defer func() { if inputFile != nil { - inputFile.Close() + _ = inputFile.Close() } }() diff --git a/pkg/input/provider/list/hmap.go b/pkg/input/provider/list/hmap.go index a3bcab0be..ff900b67e 100644 --- a/pkg/input/provider/list/hmap.go +++ b/pkg/input/provider/list/hmap.go @@ -261,7 +261,7 @@ func (i *ListInputProvider) InputType() string { // Close closes the input provider func (i *ListInputProvider) Close() { - i.hostMap.Close() + _ = i.hostMap.Close() if i.hostMapStream != nil { i.hostMapStream.Close() } @@ -303,7 +303,7 @@ func (i *ListInputProvider) initializeInputSources(opts *Options) error { } if input != nil { i.scanInputFromReader(options.ExecutionId, input) - input.Close() + _ = input.Close() } } if options.Uncover && options.UncoverQuery != nil { diff --git a/pkg/input/transform_test.go b/pkg/input/transform_test.go index 699d87772..4cd866562 100644 --- a/pkg/input/transform_test.go +++ b/pkg/input/transform_test.go @@ -13,7 +13,9 @@ func TestConvertInputToType(t *testing.T) { hm, err := hybrid.New(hybrid.DefaultDiskOptions) require.NoError(t, err, "could not create hybrid map") helper.InputsHTTP = hm - defer hm.Close() + defer func() { + _ = hm.Close() + }() _ = hm.Set("google.com", []byte("https://google.com")) diff --git a/pkg/installer/template_test.go b/pkg/installer/template_test.go index 0f277db65..39fae40b2 100644 --- a/pkg/installer/template_test.go +++ b/pkg/installer/template_test.go @@ -18,10 +18,14 @@ func TestTemplateInstallation(t *testing.T) { tm := &TemplateManager{} dir, err := os.MkdirTemp("", "nuclei-templates-*") require.Nil(t, err) - defer os.RemoveAll(dir) + defer func() { + _ = os.RemoveAll(dir) + }() cfgdir, err := os.MkdirTemp("", "nuclei-config-*") require.Nil(t, err) - defer os.RemoveAll(cfgdir) + defer func() { + _ = os.RemoveAll(cfgdir) + }() // set the config directory to a temporary directory config.DefaultConfig.SetConfigDir(cfgdir) diff --git a/pkg/installer/versioncheck.go b/pkg/installer/versioncheck.go index ffddd9363..f7764c731 100644 --- a/pkg/installer/versioncheck.go +++ b/pkg/installer/versioncheck.go @@ -92,7 +92,9 @@ func doVersionCheck(isSDK bool) error { if err != nil { return err } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() bin, err := io.ReadAll(resp.Body) if err != nil { return err diff --git a/pkg/installer/zipslip_unix_test.go b/pkg/installer/zipslip_unix_test.go index 7e9eab94a..82323d8e8 100644 --- a/pkg/installer/zipslip_unix_test.go +++ b/pkg/installer/zipslip_unix_test.go @@ -47,7 +47,9 @@ func TestZipSlip(t *testing.T) { } configuredTemplateDirectory := filepath.Join(os.TempDir(), "templates") - defer os.RemoveAll(configuredTemplateDirectory) + defer func() { + _ = os.RemoveAll(configuredTemplateDirectory) + }() t.Run("negative scenarios", func(t *testing.T) { filePathsFromZip := []string{ diff --git a/pkg/js/compiler/compiler.go b/pkg/js/compiler/compiler.go index e750df503..6de604c63 100644 --- a/pkg/js/compiler/compiler.go +++ b/pkg/js/compiler/compiler.go @@ -126,7 +126,6 @@ func (c *Compiler) ExecuteWithOptions(program *goja.Program, args *ExecuteArgs, results, err := contextutil.ExecFuncWithTwoReturns(ctx, func() (val goja.Value, err error) { // TODO(dwisiswant0): remove this once we get the RCA. defer func() { - return if ci.IsCI() { return } diff --git a/pkg/js/compiler/pool.go b/pkg/js/compiler/pool.go index 6a7e6946a..a8b98b012 100644 --- a/pkg/js/compiler/pool.go +++ b/pkg/js/compiler/pool.go @@ -89,7 +89,6 @@ func executeWithRuntime(runtime *goja.Runtime, p *goja.Program, args *ExecuteArg // TODO(dwisiswant0): remove this once we get the RCA. defer func() { - return if ci.IsCI() { return } diff --git a/pkg/js/devtools/bindgen/output.go b/pkg/js/devtools/bindgen/output.go index 990d1fa43..42dfb0b1b 100644 --- a/pkg/js/devtools/bindgen/output.go +++ b/pkg/js/devtools/bindgen/output.go @@ -36,10 +36,10 @@ func (d *TemplateData) WriteGoTemplate(outputDirectory string, pkgName string) e } if err := tmpl.Execute(output, d); err != nil { - output.Close() + _ = output.Close() return errors.Wrap(err, "could not execute go class template") } - output.Close() + _ = output.Close() cmd := exec.Command("gofmt", "-w", filename) cmd.Stderr = os.Stderr @@ -68,10 +68,10 @@ func (d *TemplateData) WriteJSTemplate(outputDirectory string, pkgName string) e } if err := tmpl.Execute(output, d); err != nil { - output.Close() + _ = output.Close() return errors.Wrap(err, "could not execute js class template") } - output.Close() + _ = output.Close() cmd := exec.Command("js-beautify", "-r", filename) cmd.Stderr = os.Stderr @@ -91,18 +91,20 @@ func (d *TemplateData) WriteMarkdownIndexTemplate(outputDirectory string) error if err != nil { return errors.Wrap(err, "could not create markdown index template") } - defer output.Close() + defer func() { + _ = output.Close() + }() buffer := &bytes.Buffer{} _, _ = buffer.WriteString("# Index\n\n") for _, v := range markdownIndexes { - _, _ = buffer.WriteString(fmt.Sprintf("* %s\n", v)) + _, _ = fmt.Fprintf(buffer, "* %s\n", v) } _, _ = buffer.WriteString("\n\n") _, _ = buffer.WriteString("# Scripts\n\n") for _, v := range d.NativeScripts { - _, _ = buffer.WriteString(fmt.Sprintf("* `%s`\n", v)) + _, _ = fmt.Fprintf(buffer, "* `%s`\n", v) } if _, err := output.Write(buffer.Bytes()); err != nil { return errors.Wrap(err, "could not write markdown index template") @@ -131,10 +133,10 @@ func (d *TemplateData) WriteMarkdownLibraryDocumentation(outputDirectory string, markdownIndexes[pkgName] = fmt.Sprintf("[%s](%s.md)", pkgName, pkgName) if err := tmpl.Execute(output, d); err != nil { - output.Close() + _ = output.Close() return err } - output.Close() + _ = output.Close() return nil } diff --git a/pkg/js/gojs/gojs.go b/pkg/js/gojs/gojs.go index a5da03e47..5a36eeb12 100644 --- a/pkg/js/gojs/gojs.go +++ b/pkg/js/gojs/gojs.go @@ -50,6 +50,7 @@ func (p *GojaModule) Name() string { } // wrapModuleFunc wraps a Go function with context injection for modules +// nolint func wrapModuleFunc(runtime *goja.Runtime, fn interface{}) interface{} { fnType := reflect.TypeOf(fn) if fnType.Kind() != reflect.Func { @@ -87,6 +88,7 @@ func wrapModuleFunc(runtime *goja.Runtime, fn interface{}) interface{} { // Add execution ID to context if available if execID := runtime.Get("executionId"); execID != nil { + //nolint ctx = context.WithValue(ctx, "executionId", execID.String()) } diff --git a/pkg/js/gojs/set.go b/pkg/js/gojs/set.go index 778d48c9f..6aff9f1c7 100644 --- a/pkg/js/gojs/set.go +++ b/pkg/js/gojs/set.go @@ -26,6 +26,7 @@ func (f *FuncOpts) valid() bool { } // wrapWithContext wraps a Go function with context injection +// nolint func wrapWithContext(runtime *goja.Runtime, fn interface{}) interface{} { fnType := reflect.TypeOf(fn) if fnType.Kind() != reflect.Func { diff --git a/pkg/js/libs/kerberos/sendtokdc.go b/pkg/js/libs/kerberos/sendtokdc.go index 52d277fa4..97f0e8142 100644 --- a/pkg/js/libs/kerberos/sendtokdc.go +++ b/pkg/js/libs/kerberos/sendtokdc.go @@ -83,7 +83,9 @@ func sendToKDCTcp(kclient *Client, msg string) ([]byte, error) { errs = append(errs, fmt.Sprintf("error establishing connection to %s: %v", kdcs[i], err)) continue } - defer tcpConn.Close() + defer func() { + _ = tcpConn.Close() + }() _ = tcpConn.SetDeadline(time.Now().Add(time.Duration(kclient.config.timeout) * time.Second)) //read and write deadline rb, err := sendTCP(tcpConn.(*net.TCPConn), []byte(msg)) if err != nil { @@ -119,7 +121,9 @@ func sendToKDCUdp(kclient *Client, msg string) ([]byte, error) { errs = append(errs, fmt.Sprintf("error establishing connection to %s: %v", kdcs[i], err)) continue } - defer udpConn.Close() + defer func() { + _ = udpConn.Close() + }() _ = udpConn.SetDeadline(time.Now().Add(time.Duration(kclient.config.timeout) * time.Second)) //read and write deadline rb, err := sendUDP(udpConn.(*net.UDPConn), []byte(msg)) if err != nil { @@ -138,7 +142,9 @@ func sendToKDCUdp(kclient *Client, msg string) ([]byte, error) { // sendUDP sends bytes to connection over UDP. func sendUDP(conn *net.UDPConn, b []byte) ([]byte, error) { var r []byte - defer conn.Close() + defer func() { + _ = conn.Close() + }() _, err := conn.Write(b) if err != nil { return r, fmt.Errorf("error sending to (%s): %v", conn.RemoteAddr().String(), err) @@ -157,7 +163,9 @@ func sendUDP(conn *net.UDPConn, b []byte) ([]byte, error) { // sendTCP sends bytes to connection over TCP. func sendTCP(conn *net.TCPConn, b []byte) ([]byte, error) { - defer conn.Close() + defer func() { + _ = conn.Close() + }() var r []byte // RFC 4120 7.2.2 specifies the first 4 bytes indicate the length of the message in big endian order. hb := make([]byte, 4) diff --git a/pkg/js/libs/ldap/ldap.go b/pkg/js/libs/ldap/ldap.go index 27e50f592..4738c91a0 100644 --- a/pkg/js/libs/ldap/ldap.go +++ b/pkg/js/libs/ldap/ldap.go @@ -363,5 +363,5 @@ func (c *Client) GetVersion() []string { // client.Close(); // ``` func (c *Client) Close() { - c.conn.Close() + _ = c.conn.Close() } diff --git a/pkg/js/libs/mssql/mssql.go b/pkg/js/libs/mssql/mssql.go index 66c5112c6..bfa95a24f 100644 --- a/pkg/js/libs/mssql/mssql.go +++ b/pkg/js/libs/mssql/mssql.go @@ -78,7 +78,9 @@ func connect(executionId string, host string, port int, username string, passwor if err != nil { return false, err } - defer db.Close() + defer func() { + _ = db.Close() + }() _, err = db.Exec("select 1") if err != nil { @@ -124,7 +126,9 @@ func isMssql(executionId string, host string, port int) (bool, error) { if err != nil { return false, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() data, check, err := mssql.DetectMSSQL(conn, 5*time.Second) if check && err != nil { @@ -177,7 +181,9 @@ func (c *MSSQLClient) ExecuteQuery(ctx context.Context, host string, port int, u if err != nil { return nil, err } - defer db.Close() + defer func() { + _ = db.Close() + }() db.SetMaxOpenConns(1) db.SetMaxIdleConns(0) diff --git a/pkg/js/libs/mysql/mysql.go b/pkg/js/libs/mysql/mysql.go index ac9214a5e..b73db4e62 100644 --- a/pkg/js/libs/mysql/mysql.go +++ b/pkg/js/libs/mysql/mysql.go @@ -52,7 +52,9 @@ func isMySQL(executionId string, host string, port int) (bool, error) { if err != nil { return false, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() plugin := &mysqlplugin.MYSQLPlugin{} service, err := plugin.Run(conn, 5*time.Second, plugins.Target{Host: host}) @@ -145,7 +147,9 @@ func fingerprintMySQL(executionId string, host string, port int) (MySQLInfo, err if err != nil { return info, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() plugin := &mysqlplugin.MYSQLPlugin{} service, err := plugin.Run(conn, 5*time.Second, plugins.Target{Host: host}) @@ -218,7 +222,9 @@ func (c *MySQLClient) ExecuteQueryWithOpts(ctx context.Context, opts MySQLOption if err != nil { return nil, err } - defer db.Close() + defer func() { + _ = db.Close() + }() db.SetMaxOpenConns(1) db.SetMaxIdleConns(0) diff --git a/pkg/js/libs/mysql/mysql_private.go b/pkg/js/libs/mysql/mysql_private.go index c5f229217..c731efd93 100644 --- a/pkg/js/libs/mysql/mysql_private.go +++ b/pkg/js/libs/mysql/mysql_private.go @@ -77,7 +77,9 @@ func connectWithDSN(dsn string) (bool, error) { if err != nil { return false, err } - defer db.Close() + defer func() { + _ = db.Close() + }() db.SetMaxOpenConns(1) db.SetMaxIdleConns(0) diff --git a/pkg/js/libs/oracle/oracle.go b/pkg/js/libs/oracle/oracle.go index 3fe6cb792..1b5a94a99 100644 --- a/pkg/js/libs/oracle/oracle.go +++ b/pkg/js/libs/oracle/oracle.go @@ -48,7 +48,9 @@ func isOracle(executionId string, host string, port int) (IsOracleResponse, erro if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() oracledbPlugin := oracledb.ORACLEPlugin{} service, err := oracledbPlugin.Run(conn, timeout, plugins.Target{Host: host}) diff --git a/pkg/js/libs/pop3/pop3.go b/pkg/js/libs/pop3/pop3.go index a9deb626a..c1a41a686 100644 --- a/pkg/js/libs/pop3/pop3.go +++ b/pkg/js/libs/pop3/pop3.go @@ -49,7 +49,9 @@ func isPoP3(executionId string, host string, port int) (IsPOP3Response, error) { if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() pop3Plugin := pop3.POP3Plugin{} service, err := pop3Plugin.Run(conn, timeout, plugins.Target{Host: host}) diff --git a/pkg/js/libs/postgres/postgres.go b/pkg/js/libs/postgres/postgres.go index 2ec49fb93..2537269fd 100644 --- a/pkg/js/libs/postgres/postgres.go +++ b/pkg/js/libs/postgres/postgres.go @@ -13,7 +13,6 @@ import ( postgres "github.com/praetorian-inc/fingerprintx/pkg/plugins/services/postgresql" utils "github.com/projectdiscovery/nuclei/v3/pkg/js/utils" "github.com/projectdiscovery/nuclei/v3/pkg/js/utils/pgwrap" - _ "github.com/projectdiscovery/nuclei/v3/pkg/js/utils/pgwrap" "github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/protocolstate" ) @@ -52,7 +51,9 @@ func isPostgres(executionId string, host string, port int) (bool, error) { if err != nil { return false, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() _ = conn.SetDeadline(time.Now().Add(timeout)) @@ -127,7 +128,9 @@ func executeQuery(executionId string, host string, port int, username string, pa if err != nil { return nil, err } - defer db.Close() + defer func() { + _ = db.Close() + }() rows, err := db.Query(query) if err != nil { @@ -192,7 +195,9 @@ func connect(executionId string, host string, port int, username string, passwor }, IdleCheckFrequency: -1, }).WithContext(ctx).WithTimeout(10 * time.Second) - defer db.Close() + defer func() { + _ = db.Close() + }() _, err := db.Exec("select 1") if err != nil { diff --git a/pkg/js/libs/rdp/rdp.go b/pkg/js/libs/rdp/rdp.go index 9b04f0892..819045054 100644 --- a/pkg/js/libs/rdp/rdp.go +++ b/pkg/js/libs/rdp/rdp.go @@ -51,7 +51,9 @@ func isRDP(executionId string, host string, port int) (IsRDPResponse, error) { if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() server, isRDP, err := rdp.DetectRDP(conn, timeout) if err != nil { @@ -105,7 +107,9 @@ func checkRDPAuth(executionId string, host string, port int) (CheckRDPAuthRespon if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() pluginInfo, auth, err := rdp.DetectRDPAuth(conn, timeout) if err != nil { diff --git a/pkg/js/libs/redis/redis.go b/pkg/js/libs/redis/redis.go index 10bee202a..0c60d3928 100644 --- a/pkg/js/libs/redis/redis.go +++ b/pkg/js/libs/redis/redis.go @@ -35,7 +35,9 @@ func getServerInfo(executionId string, host string, port int) (string, error) { Password: "", // no password set DB: 0, // use default DB }) - defer client.Close() + defer func() { + _ = client.Close() + }() // Ping the Redis server _, err := client.Ping(context.TODO()).Result() @@ -75,7 +77,9 @@ func connect(executionId string, host string, port int, password string) (bool, Password: password, // no password set DB: 0, // use default DB }) - defer client.Close() + defer func() { + _ = client.Close() + }() _, err := client.Ping(context.TODO()).Result() if err != nil { @@ -113,7 +117,9 @@ func getServerInfoAuth(executionId string, host string, port int, password strin Password: password, // no password set DB: 0, // use default DB }) - defer client.Close() + defer func() { + _ = client.Close() + }() // Ping the Redis server _, err := client.Ping(context.TODO()).Result() @@ -150,7 +156,9 @@ func isAuthenticated(executionId string, host string, port int) (bool, error) { if err != nil { return false, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() _, err = plugin.Run(conn, timeout, plugins.Target{Host: host}) if err != nil { @@ -177,7 +185,9 @@ func RunLuaScript(ctx context.Context, host string, port int, password string, s Password: password, DB: 0, // use default DB }) - defer client.Close() + defer func() { + _ = client.Close() + }() // Ping the Redis server _, err := client.Ping(context.TODO()).Result() diff --git a/pkg/js/libs/rsync/rsync.go b/pkg/js/libs/rsync/rsync.go index 6a8e5ceb6..8d5502ab6 100644 --- a/pkg/js/libs/rsync/rsync.go +++ b/pkg/js/libs/rsync/rsync.go @@ -48,7 +48,9 @@ func isRsync(executionId string, host string, port int) (IsRsyncResponse, error) if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() rsyncPlugin := rsync.RSYNCPlugin{} service, err := rsyncPlugin.Run(conn, timeout, plugins.Target{Host: host}) diff --git a/pkg/js/libs/smb/smb.go b/pkg/js/libs/smb/smb.go index 4a0334517..168a189b4 100644 --- a/pkg/js/libs/smb/smb.go +++ b/pkg/js/libs/smb/smb.go @@ -62,7 +62,9 @@ func connectSMBInfoMode(executionId string, host string, port int) (*smb.SMBLog, if err != nil { return nil, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() result, err = getSMBInfo(conn, true, true) if err != nil { return result, nil @@ -121,7 +123,9 @@ func listShares(executionId string, host string, port int, user string, password if err != nil { return nil, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() d := &smb2.Dialer{ Initiator: &smb2.NTLMInitiator{ diff --git a/pkg/js/libs/smb/smb_private.go b/pkg/js/libs/smb/smb_private.go index 04ef8c8ad..044aa880a 100644 --- a/pkg/js/libs/smb/smb_private.go +++ b/pkg/js/libs/smb/smb_private.go @@ -25,7 +25,9 @@ func collectSMBv2Metadata(executionId string, host string, port int, timeout tim if err != nil { return nil, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() metadata, err := smb.DetectSMBv2(conn, timeout) if err != nil { diff --git a/pkg/js/libs/smb/smbghost.go b/pkg/js/libs/smb/smbghost.go index e08dee3f2..ec1e9cdfe 100644 --- a/pkg/js/libs/smb/smbghost.go +++ b/pkg/js/libs/smb/smbghost.go @@ -43,7 +43,9 @@ func detectSMBGhost(executionId string, host string, port int) (bool, error) { return false, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() _, err = conn.Write([]byte(pkt)) if err != nil { diff --git a/pkg/js/libs/smtp/smtp.go b/pkg/js/libs/smtp/smtp.go index cc46159b9..9f5068e87 100644 --- a/pkg/js/libs/smtp/smtp.go +++ b/pkg/js/libs/smtp/smtp.go @@ -96,7 +96,9 @@ func (c *Client) IsSMTP() (SMTPResponse, error) { if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() smtpPlugin := pluginsmtp.SMTPPlugin{} service, err := smtpPlugin.Run(conn, timeout, plugins.Target{Host: c.host}) @@ -135,7 +137,9 @@ func (c *Client) IsOpenRelay(msg *SMTPMessage) (bool, error) { if err != nil { return false, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() client, err := smtp.NewClient(conn, c.host) if err != nil { return false, err diff --git a/pkg/js/libs/ssh/ssh.go b/pkg/js/libs/ssh/ssh.go index cf7554b5e..17b35afe5 100644 --- a/pkg/js/libs/ssh/ssh.go +++ b/pkg/js/libs/ssh/ssh.go @@ -135,7 +135,9 @@ func (c *SSHClient) Run(cmd string) (string, error) { if err != nil { return "", err } - defer session.Close() + defer func() { + _ = session.Close() + }() data, err := session.Output(cmd) if err != nil { @@ -211,7 +213,9 @@ func connectSSHInfoMode(opts *connectOptions) (*ssh.HandshakeLog, error) { if err != nil { return nil, err } - defer client.Close() + defer func() { + _ = client.Close() + }() return data, nil } diff --git a/pkg/js/libs/telnet/telnet.go b/pkg/js/libs/telnet/telnet.go index 97587b8ae..362b65509 100644 --- a/pkg/js/libs/telnet/telnet.go +++ b/pkg/js/libs/telnet/telnet.go @@ -48,7 +48,9 @@ func isTelnet(executionId string, host string, port int) (IsTelnetResponse, erro if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() telnetPlugin := telnet.TELNETPlugin{} service, err := telnetPlugin.Run(conn, timeout, plugins.Target{Host: host}) diff --git a/pkg/js/libs/vnc/vnc.go b/pkg/js/libs/vnc/vnc.go index d64de37b5..205ecc092 100644 --- a/pkg/js/libs/vnc/vnc.go +++ b/pkg/js/libs/vnc/vnc.go @@ -49,7 +49,9 @@ func isVNC(executionId string, host string, port int) (IsVNCResponse, error) { if err != nil { return resp, err } - defer conn.Close() + defer func() { + _ = conn.Close() + }() vncPlugin := vnc.VNCPlugin{} service, err := vncPlugin.Run(conn, timeout, plugins.Target{Host: host}) diff --git a/pkg/js/utils/pgwrap/pgwrap.go b/pkg/js/utils/pgwrap/pgwrap.go index b99786882..bee71d306 100644 --- a/pkg/js/utils/pgwrap/pgwrap.go +++ b/pkg/js/utils/pgwrap/pgwrap.go @@ -14,20 +14,24 @@ const ( PGWrapDriver = "pgwrap" ) +// nolint type pgDial struct { fd *fastdialer.Dialer } +// nolint func (p *pgDial) Dial(network, address string) (net.Conn, error) { return p.fd.Dial(context.TODO(), network, address) } +// nolint func (p *pgDial) DialTimeout(network, address string, timeout time.Duration) (net.Conn, error) { ctx, cancel := context.WithTimeoutCause(context.Background(), timeout, fastdialer.ErrDialTimeout) defer cancel() return p.fd.Dial(ctx, network, address) } +// nolint func (p *pgDial) DialContext(ctx context.Context, network, address string) (net.Conn, error) { return p.fd.Dial(ctx, network, address) } @@ -44,6 +48,7 @@ type PgDriver struct{} // library. func (d PgDriver) Open(name string) (driver.Conn, error) { panic("todo") + // nolint return nil, nil //return pq.DialOpen(&pgDial{fd: dialer.Fastdialer}, name) } diff --git a/pkg/js/utils/util.go b/pkg/js/utils/util.go index df08fb414..4a49b3879 100644 --- a/pkg/js/utils/util.go +++ b/pkg/js/utils/util.go @@ -21,7 +21,9 @@ type SQLResult struct { // // The function closes the sql.Rows when finished. func UnmarshalSQLRows(rows *sql.Rows) (*SQLResult, error) { - defer rows.Close() + defer func() { + _ = rows.Close() + }() columnTypes, err := rows.ColumnTypes() if err != nil { return nil, err diff --git a/pkg/operators/operators.go b/pkg/operators/operators.go index 50fabfc78..aa48872f2 100644 --- a/pkg/operators/operators.go +++ b/pkg/operators/operators.go @@ -243,7 +243,7 @@ func (operators *Operators) Execute(data map[string]interface{}, match MatchFunc } // state variable to check if all extractors are internal - var allInternalExtractors bool = true + allInternalExtractors := true // Start with the extractors first and evaluate them. for _, extractor := range operators.Extractors { diff --git a/pkg/output/output.go b/pkg/output/output.go index e85774b83..dcb88f70e 100644 --- a/pkg/output/output.go +++ b/pkg/output/output.go @@ -229,7 +229,7 @@ type IssueTrackerMetadata struct { // NewStandardWriter creates a new output writer based on user configurations func NewStandardWriter(options *types.Options) (*StandardWriter, error) { - resumeBool := false + var resumeBool bool if options.Resume != "" { resumeBool = true } @@ -452,13 +452,13 @@ func (w *StandardWriter) Colorizer() aurora.Aurora { // Close closes the output writing interface func (w *StandardWriter) Close() { if w.outputFile != nil { - w.outputFile.Close() + _ = w.outputFile.Close() } if w.traceFile != nil { - w.traceFile.Close() + _ = w.traceFile.Close() } if w.errorFile != nil { - w.errorFile.Close() + _ = w.errorFile.Close() } } @@ -563,8 +563,8 @@ func (w *StandardWriter) WriteStoreDebugData(host, templateID, eventType string, fmt.Print(err) return } - _, _ = f.WriteString(fmt.Sprintln(data)) - f.Close() + _, _ = fmt.Fprintln(f, data) + _ = f.Close() } } diff --git a/pkg/progress/progress.go b/pkg/progress/progress.go index 853fb103d..c8703b846 100644 --- a/pkg/progress/progress.go +++ b/pkg/progress/progress.go @@ -148,7 +148,7 @@ func (p *StatsTicker) makePrintCallback() func(stats clistats.StatisticsClient) if startedAt, ok := stats.GetStatic("startedAt"); ok { if startedAtTime, ok := startedAt.(time.Time); ok { duration = time.Since(startedAtTime) - builder.WriteString(fmt.Sprintf("[%s]", fmtDuration(duration))) + _, _ = fmt.Fprintf(builder, "[%s]", fmtDuration(duration)) } } diff --git a/pkg/projectfile/project.go b/pkg/projectfile/project.go index 84e0a0cb5..9a79c4aa8 100644 --- a/pkg/projectfile/project.go +++ b/pkg/projectfile/project.go @@ -84,5 +84,5 @@ func (pf *ProjectFile) Set(req []byte, resp *http.Response, data []byte) error { } func (pf *ProjectFile) Close() { - pf.hm.Close() + _ = pf.hm.Close() } diff --git a/pkg/protocols/code/code.go b/pkg/protocols/code/code.go index 6972cbd38..8878589b2 100644 --- a/pkg/protocols/code/code.go +++ b/pkg/protocols/code/code.go @@ -249,14 +249,14 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, dynamicVa gologger.Debug().MsgFunc(func() string { dashes := strings.Repeat("-", 15) sb := &strings.Builder{} - sb.WriteString(fmt.Sprintf("[%s] Dumped Executed Source Code for input/stdin: '%v'", request.options.TemplateID, input.MetaInput.Input)) - sb.WriteString(fmt.Sprintf("\n%v\n%v\n%v\n", dashes, "Source Code:", dashes)) + _, _ = fmt.Fprintf(sb, "[%s] Dumped Executed Source Code for input/stdin: '%v'", request.options.TemplateID, input.MetaInput.Input) + _, _ = fmt.Fprintf(sb, "\n%v\n%v\n%v\n", dashes, "Source Code:", dashes) sb.WriteString(interpretEnvVars(request.Source, allvars)) sb.WriteString("\n") - sb.WriteString(fmt.Sprintf("\n%v\n%v\n%v\n", dashes, "Command Executed:", dashes)) + _, _ = fmt.Fprintf(sb, "\n%v\n%v\n%v\n", dashes, "Command Executed:", dashes) sb.WriteString(interpretEnvVars(gOutput.Command, allvars)) sb.WriteString("\n") - sb.WriteString(fmt.Sprintf("\n%v\n%v\n%v\n", dashes, "Command Output:", dashes)) + _, _ = fmt.Fprintf(sb, "\n%v\n%v\n%v\n", dashes, "Command Output:", dashes) sb.WriteString(gOutput.DebugData.String()) sb.WriteString("\n") sb.WriteString("[WRN] Command Output here is stdout+sterr, in response variables they are seperate (use -v -svd flags for more details)") diff --git a/pkg/protocols/common/automaticscan/automaticscan.go b/pkg/protocols/common/automaticscan/automaticscan.go index 32f2dc5a1..a51b1c402 100644 --- a/pkg/protocols/common/automaticscan/automaticscan.go +++ b/pkg/protocols/common/automaticscan/automaticscan.go @@ -77,7 +77,7 @@ func New(opts Options) (*Service, error) { mappingFile := filepath.Join(config.DefaultConfig.GetTemplateDir(), mappingFilename) if file, err := os.Open(mappingFile); err == nil { _ = yaml.NewDecoder(file).Decode(&mappingData) - file.Close() + _ = file.Close() } if opts.ExecuterOpts.Options.Verbose { gologger.Verbose().Msgf("Normalized mapping (%d): %v\n", len(mappingData), mappingData) @@ -206,7 +206,9 @@ func (s *Service) getTagsUsingWappalyzer(input *contextargs.MetaInput) []string if err != nil { return nil } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() data, err := io.ReadAll(io.LimitReader(resp.Body, maxDefaultBody)) if err != nil { return nil diff --git a/pkg/protocols/common/expressions/expressions.go b/pkg/protocols/common/expressions/expressions.go index a3681e358..8e31f28be 100644 --- a/pkg/protocols/common/expressions/expressions.go +++ b/pkg/protocols/common/expressions/expressions.go @@ -76,11 +76,8 @@ func FindExpressions(data, OpenMarker, CloseMarker string, base map[string]inter iterations int exps []string ) - for { - // check if we reached the maximum number of iterations - if iterations > maxIterations { - break - } + for iterations < maxIterations { + // attempt to find open markers iterations++ // attempt to find open markers indexOpenMarker := strings.Index(data, OpenMarker) diff --git a/pkg/protocols/common/generators/load.go b/pkg/protocols/common/generators/load.go index 1d46233f2..892fe358a 100644 --- a/pkg/protocols/common/generators/load.go +++ b/pkg/protocols/common/generators/load.go @@ -42,7 +42,9 @@ func (generator *PayloadGenerator) loadPayloads(payloads map[string]interface{}, // loadPayloadsFromFile loads a file to a string slice func (generator *PayloadGenerator) loadPayloadsFromFile(file io.ReadCloser) ([]string, error) { var lines []string - defer file.Close() + defer func() { + _ = file.Close() + }() scanner := bufio.NewScanner(file) for scanner.Scan() { diff --git a/pkg/protocols/common/hosterrorscache/hosterrorscache.go b/pkg/protocols/common/hosterrorscache/hosterrorscache.go index 3039dbdf0..da4cee39e 100644 --- a/pkg/protocols/common/hosterrorscache/hosterrorscache.go +++ b/pkg/protocols/common/hosterrorscache/hosterrorscache.go @@ -85,7 +85,7 @@ func (c *Cache) Close() { // NormalizeCacheValue processes the input value and returns a normalized cache // value. func (c *Cache) NormalizeCacheValue(value string) string { - var normalizedValue string = value + normalizedValue := value u, err := url.ParseRequestURI(value) if err != nil || u.Host == "" { diff --git a/pkg/protocols/common/interactsh/interactsh.go b/pkg/protocols/common/interactsh/interactsh.go index da59f10fb..f43b4336c 100644 --- a/pkg/protocols/common/interactsh/interactsh.go +++ b/pkg/protocols/common/interactsh/interactsh.go @@ -183,9 +183,9 @@ func (c *Client) processInteractionForRequest(interaction *server.Interaction, d if c.options.FuzzParamsFrequency != nil { if !matched { - c.options.FuzzParamsFrequency.MarkParameter(data.Parameter, data.Request.URL.String(), data.Operators.TemplateID) + c.options.FuzzParamsFrequency.MarkParameter(data.Parameter, data.Request.String(), data.Operators.TemplateID) } else { - c.options.FuzzParamsFrequency.UnmarkParameter(data.Parameter, data.Request.URL.String(), data.Operators.TemplateID) + c.options.FuzzParamsFrequency.UnmarkParameter(data.Parameter, data.Request.String(), data.Operators.TemplateID) } } @@ -257,7 +257,7 @@ func (c *Client) Close() bool { } if c.interactsh != nil { _ = c.interactsh.StopPolling() - c.interactsh.Close() + _ = c.interactsh.Close() } c.requests.Purge() diff --git a/pkg/protocols/common/protocolstate/state.go b/pkg/protocols/common/protocolstate/state.go index 9941254c3..3e39f2eae 100644 --- a/pkg/protocols/common/protocolstate/state.go +++ b/pkg/protocols/common/protocolstate/state.go @@ -182,7 +182,7 @@ func initDialers(options *types.Options) error { HTTPClientPool: mapsutil.NewSyncLockMap[string, *retryablehttp.Client](), } - dialers.Set(options.ExecutionId, dialersInstance) + _ = dialers.Set(options.ExecutionId, dialersInstance) // Set a custom dialer for the "nucleitcp" protocol. This is just plain TCP, but it's registered // with a different name so that we do not clobber the "tcp" dialer in the event that nuclei is diff --git a/pkg/protocols/common/randomip/randomip.go b/pkg/protocols/common/randomip/randomip.go index 8c9321980..cdead8225 100644 --- a/pkg/protocols/common/randomip/randomip.go +++ b/pkg/protocols/common/randomip/randomip.go @@ -35,6 +35,7 @@ func GetRandomIPWithCidr(cidrs ...string) (net.IP, error) { } switch { + //nolint case 255 == ipnet.Mask[len(ipnet.Mask)-1]: return baseIp, nil case iputil.IsIPv4(baseIp.String()): diff --git a/pkg/protocols/dns/cluster.go b/pkg/protocols/dns/cluster.go index 86852b4d7..dce49503b 100644 --- a/pkg/protocols/dns/cluster.go +++ b/pkg/protocols/dns/cluster.go @@ -6,7 +6,6 @@ import ( "github.com/cespare/xxhash" ) - // TmplClusterKey generates a unique key for the request // to be used in the clustering process. func (request *Request) TmplClusterKey() uint64 { @@ -20,5 +19,6 @@ func (request *Request) TmplClusterKey() uint64 { // IsClusterable returns true if the request is eligible to be clustered. func (request *Request) IsClusterable() bool { + // nolint return !(len(request.Resolvers) > 0 || request.Trace || request.ID != "") } diff --git a/pkg/protocols/dns/dnsclientpool/clientpool.go b/pkg/protocols/dns/dnsclientpool/clientpool.go index 4f019808f..e45563dba 100644 --- a/pkg/protocols/dns/dnsclientpool/clientpool.go +++ b/pkg/protocols/dns/dnsclientpool/clientpool.go @@ -66,6 +66,7 @@ func (c *Configuration) Hash() string { // Get creates or gets a client for the protocol based on custom configuration func Get(options *types.Options, configuration *Configuration) (*retryabledns.Client, error) { + //nolint if !(configuration.Retries > 1) && len(configuration.Resolvers) == 0 { return normalClient, nil } diff --git a/pkg/protocols/dns/operators.go b/pkg/protocols/dns/operators.go index 0f1831530..1224e6bb8 100644 --- a/pkg/protocols/dns/operators.go +++ b/pkg/protocols/dns/operators.go @@ -150,9 +150,9 @@ func traceToString(traceData *retryabledns.TraceData, withSteps bool) string { if traceData != nil { for i, dnsRecord := range traceData.DNSData { if withSteps { - buffer.WriteString(fmt.Sprintf("request %d to resolver %s:\n", i, strings.Join(dnsRecord.Resolver, ","))) + _, _ = fmt.Fprintf(buffer, "request %d to resolver %s:\n", i, strings.Join(dnsRecord.Resolver, ",")) } - buffer.WriteString(dnsRecord.Raw) + _, _ = fmt.Fprintf(buffer, "%s\n", dnsRecord.Raw) } } return buffer.String() diff --git a/pkg/protocols/file/file.go b/pkg/protocols/file/file.go index d9968ffe7..f0e1b0d4f 100644 --- a/pkg/protocols/file/file.go +++ b/pkg/protocols/file/file.go @@ -100,7 +100,7 @@ func (request *Request) GetID() string { // Compile compiles the protocol request for further execution. func (request *Request) Compile(options *protocols.ExecutorOptions) error { // if there are no matchers/extractors, we trigger an error as no operation would be performed on the template - if request.Operators.IsEmpty() { + if request.IsEmpty() { return errors.New("empty operators") } compiled := &request.Operators diff --git a/pkg/protocols/file/find.go b/pkg/protocols/file/find.go index 1ff3227a8..916696f2f 100644 --- a/pkg/protocols/file/find.go +++ b/pkg/protocols/file/find.go @@ -208,7 +208,9 @@ func readChunk(fileName string) ([]byte, error) { return nil, err } - defer r.Close() + defer func() { + _ = r.Close() + }() var buff [1024]byte if _, err = io.ReadFull(r, buff[:]); err != nil { diff --git a/pkg/protocols/file/find_test.go b/pkg/protocols/file/find_test.go index 3df5d2383..43894ae64 100644 --- a/pkg/protocols/file/find_test.go +++ b/pkg/protocols/file/find_test.go @@ -35,7 +35,9 @@ func TestFindInputPaths(t *testing.T) { tempDir, err := os.MkdirTemp("", "test-*") require.Nil(t, err, "could not create temporary directory") - defer os.RemoveAll(tempDir) + defer func() { + _ = os.RemoveAll(tempDir) + }() files := map[string]string{ "test.go": "TEST", diff --git a/pkg/protocols/file/request.go b/pkg/protocols/file/request.go index cd82fc001..b02bab20b 100644 --- a/pkg/protocols/file/request.go +++ b/pkg/protocols/file/request.go @@ -64,7 +64,9 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, metadata, gologger.Error().Msgf("%s\n", err) return } - defer fi.Close() + defer func() { + _ = fi.Close() + }() format, stream, _ := archives.Identify(input.Context(), filePath, fi) switch { case format != nil: @@ -82,7 +84,9 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, metadata, gologger.Error().Msgf("%s\n", err) return err } - defer reader.Close() + defer func() { + _ = reader.Close() + }() event, fileMatches, err := request.processReader(reader, archiveFileName, input, file.Size(), previous) if err != nil { if errors.Is(err, errEmptyResult) { @@ -123,8 +127,10 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, metadata, request.options.Progress.IncrementFailedRequestsBy(1) return } - defer tmpFileOut.Close() - defer os.RemoveAll(tmpFileOut.Name()) + defer func() { + _ = tmpFileOut.Close() + _ = os.RemoveAll(tmpFileOut.Name()) + }() _, err = io.Copy(tmpFileOut, reader) if err != nil { gologger.Error().Msgf("%s\n", err) @@ -189,7 +195,9 @@ func (request *Request) processFile(filePath string, input *contextargs.Context, if err != nil { return nil, nil, errors.Errorf("Could not open file path %s: %s\n", filePath, err) } - defer file.Close() + defer func() { + _ = file.Close() + }() stat, err := file.Stat() if err != nil { diff --git a/pkg/protocols/file/request_test.go b/pkg/protocols/file/request_test.go index acb433649..118d1885c 100644 --- a/pkg/protocols/file/request_test.go +++ b/pkg/protocols/file/request_test.go @@ -102,7 +102,9 @@ func TestFileExecuteWithResults(t *testing.T) { tempDir, err := os.MkdirTemp("", "test-*") require.Nil(t, err, "could not create temporary directory") - defer os.RemoveAll(tempDir) + defer func() { + _ = os.RemoveAll(tempDir) + }() files := map[string][]byte{ tt.fileName: tt.data, diff --git a/pkg/protocols/headless/engine/engine.go b/pkg/protocols/headless/engine/engine.go index 20942c261..3be23b430 100644 --- a/pkg/protocols/headless/engine/engine.go +++ b/pkg/protocols/headless/engine/engine.go @@ -142,7 +142,7 @@ func (b *Browser) getHTTPClient() (*http.Client, error) { // Close closes the browser engine func (b *Browser) Close() { - b.engine.Close() - os.RemoveAll(b.tempDir) + _ = b.engine.Close() + _ = os.RemoveAll(b.tempDir) processutil.CloseProcesses(processutil.IsChromeProcess, b.previousPIDs) } diff --git a/pkg/protocols/headless/engine/page.go b/pkg/protocols/headless/engine/page.go index fd8687e14..8a7cb1dea 100644 --- a/pkg/protocols/headless/engine/page.go +++ b/pkg/protocols/headless/engine/page.go @@ -200,7 +200,9 @@ func (i *Instance) Run(ctx *contextargs.Context, actions []*Action, payloads map if resp, err := http.ReadResponse(bufio.NewReader(strings.NewReader(firstItem.RawResponse)), nil); err == nil { data["header"] = utils.HeadersToString(resp.Header) data["status_code"] = fmt.Sprint(resp.StatusCode) - resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() } } @@ -215,7 +217,7 @@ func (p *Page) Close() { if p.hijackNative != nil { _ = p.hijackNative.Stop() } - p.page.Close() + _ = p.page.Close() } // Page returns the current page for the actions diff --git a/pkg/protocols/headless/engine/page_actions.go b/pkg/protocols/headless/engine/page_actions.go index 864337789..fc04c2b4d 100644 --- a/pkg/protocols/headless/engine/page_actions.go +++ b/pkg/protocols/headless/engine/page_actions.go @@ -54,7 +54,6 @@ func (p *Page) ExecuteActions(input *contextargs.Context, actions []*Action) (ou // avoid any future panics caused due to go-rod library // TODO(dwisiswant0): remove this once we get the RCA. defer func() { - return if ci.IsCI() { return } @@ -673,7 +672,7 @@ func (p *Page) WaitPageLifecycleEvent(act *Action, out ActionData, event proto.P // WaitStable waits until the page is stable func (p *Page) WaitStable(act *Action, out ActionData) error { - var dur time.Duration = time.Second // default stable page duration: 1s + dur := time.Second // default stable page duration: 1s timeout, err := getTimeout(p, act) if err != nil { diff --git a/pkg/protocols/headless/engine/page_actions_test.go b/pkg/protocols/headless/engine/page_actions_test.go index cbd56bb02..04f6d5f49 100644 --- a/pkg/protocols/headless/engine/page_actions_test.go +++ b/pkg/protocols/headless/engine/page_actions_test.go @@ -658,7 +658,9 @@ func testHeadless(t *testing.T, actions []*Action, timeout time.Duration, handle instance, err := browser.NewInstance() require.Nil(t, err, "could not create browser instance") - defer instance.Close() + defer func() { + _ = instance.Close() + }() ts := httptest.NewServer(http.HandlerFunc(handler)) defer ts.Close() @@ -717,7 +719,9 @@ func TestBlockedHeadlessURLS(t *testing.T) { instance, err := browser.NewInstance() require.Nil(t, err, "could not create browser instance") - defer instance.Close() + defer func() { + _ = instance.Close() + }() ts := httptest.NewServer(nil) defer ts.Close() diff --git a/pkg/protocols/headless/request.go b/pkg/protocols/headless/request.go index af65c4b2f..215041164 100644 --- a/pkg/protocols/headless/request.go +++ b/pkg/protocols/headless/request.go @@ -117,7 +117,9 @@ func (request *Request) executeRequestWithPayloads(input *contextargs.Context, p request.options.Progress.IncrementFailedRequestsBy(1) return errors.Wrap(err, errCouldNotGetHtmlElement) } - defer instance.Close() + defer func() { + _ = instance.Close() + }() instance.SetInteractsh(request.options.Interactsh) @@ -159,13 +161,13 @@ func (request *Request) executeRequestWithPayloads(input *contextargs.Context, p if act.ActionType.ActionType == engine.ActionNavigate { value := act.GetArg("url") if reqLog[value] != "" { - reqBuilder.WriteString(fmt.Sprintf("\tnavigate => %v\n", reqLog[value])) + _, _ = fmt.Fprintf(reqBuilder, "\tnavigate => %v\n", reqLog[value]) } else { - reqBuilder.WriteString(fmt.Sprintf("%v not found in %v\n", value, reqLog)) + _, _ = fmt.Fprintf(reqBuilder, "%v not found in %v\n", value, reqLog) } } else { actStepStr := act.String() - reqBuilder.WriteString("\t" + actStepStr + "\n") + _, _ = fmt.Fprintf(reqBuilder, "\t%s\n", actStepStr) } } gologger.Debug().Msg(reqBuilder.String()) @@ -239,7 +241,7 @@ func (request *Request) executeFuzzingRule(input *contextargs.Context, payloads return true } newInput := input.Clone() - newInput.MetaInput.Input = gr.Request.URL.String() + newInput.MetaInput.Input = gr.Request.String() if err := request.executeRequestWithPayloads(newInput, gr.DynamicValues, previous, callback); err != nil { return false } diff --git a/pkg/protocols/http/build_request.go b/pkg/protocols/http/build_request.go index 1cb9553c9..291168265 100644 --- a/pkg/protocols/http/build_request.go +++ b/pkg/protocols/http/build_request.go @@ -115,7 +115,7 @@ func (g *generatedRequest) ApplyAuth(provider authprovider.AuthProvider) { func (g *generatedRequest) URL() string { if g.request != nil { - return g.request.URL.String() + return g.request.String() } if g.rawRequest != nil { return g.rawRequest.FullURL @@ -456,9 +456,9 @@ func (r *requestGenerator) fillRequest(req *retryablehttp.Request, values map[st if !LeaveDefaultPorts { switch { - case req.URL.Scheme == "http" && strings.HasSuffix(req.Host, ":80"): + case req.Scheme == "http" && strings.HasSuffix(req.Host, ":80"): req.Host = strings.TrimSuffix(req.Host, ":80") - case req.URL.Scheme == "https" && strings.HasSuffix(req.Host, ":443"): + case req.Scheme == "https" && strings.HasSuffix(req.Host, ":443"): req.Host = strings.TrimSuffix(req.Host, ":443") } } diff --git a/pkg/protocols/http/build_request_test.go b/pkg/protocols/http/build_request_test.go index 4405bd10b..2c3157923 100644 --- a/pkg/protocols/http/build_request_test.go +++ b/pkg/protocols/http/build_request_test.go @@ -46,7 +46,7 @@ func TestMakeRequestFromModal(t *testing.T) { t.Fatalf("url is nil in generator make") } bodyBytes, _ := req.request.BodyBytes() - require.Equal(t, "/login.php", req.request.URL.Path, "could not get correct request path") + require.Equal(t, "/login.php", req.request.Path, "could not get correct request path") require.Equal(t, "username=test&password=pass", string(bodyBytes), "could not get correct request body") } @@ -72,13 +72,13 @@ func TestMakeRequestFromModalTrimSuffixSlash(t *testing.T) { inputData, payloads, _ := generator.nextValue() req, err := generator.Make(context.Background(), contextargs.NewWithInput(context.Background(), "https://example.com/test.php"), inputData, payloads, map[string]interface{}{}) require.Nil(t, err, "could not make http request") - require.Equal(t, "https://example.com/test.php?query=example", req.request.URL.String(), "could not get correct request path") + require.Equal(t, "https://example.com/test.php?query=example", req.request.String(), "could not get correct request path") generator = request.newGenerator(false) inputData, payloads, _ = generator.nextValue() req, err = generator.Make(context.Background(), contextargs.NewWithInput(context.Background(), "https://example.com/test/"), inputData, payloads, map[string]interface{}{}) require.Nil(t, err, "could not make http request") - require.Equal(t, "https://example.com/test/?query=example", req.request.URL.String(), "could not get correct request path") + require.Equal(t, "https://example.com/test/?query=example", req.request.String(), "could not get correct request path") } func TestMakeRequestFromRawWithPayloads(t *testing.T) { @@ -199,7 +199,7 @@ func TestMakeRequestFromModelUniqueInteractsh(t *testing.T) { require.Nil(t, err, "could not make http request") // check if all the interactsh markers are replaced with unique urls - require.NotContains(t, got.request.URL.String(), "{{interactsh-url}}", "could not get correct interactsh url") + require.NotContains(t, got.request.String(), "{{interactsh-url}}", "could not get correct interactsh url") // check the length of returned urls require.Equal(t, len(got.interactshURLs), 4, "could not get correct interactsh url") // check if the interactsh urls are unique diff --git a/pkg/protocols/http/cluster.go b/pkg/protocols/http/cluster.go index aa95c32ba..a13d7fc81 100644 --- a/pkg/protocols/http/cluster.go +++ b/pkg/protocols/http/cluster.go @@ -17,5 +17,6 @@ func (request *Request) TmplClusterKey() uint64 { // IsClusterable returns true if the request is eligible to be clustered. func (request *Request) IsClusterable() bool { + //nolint return !(len(request.Payloads) > 0 || len(request.Fuzzing) > 0 || len(request.Raw) > 0 || len(request.Body) > 0 || request.Unsafe || request.NeedsRequestCondition() || request.Name != "") } diff --git a/pkg/protocols/http/race/syncedreadcloser.go b/pkg/protocols/http/race/syncedreadcloser.go index 4e48662c6..9aadf1c32 100644 --- a/pkg/protocols/http/race/syncedreadcloser.go +++ b/pkg/protocols/http/race/syncedreadcloser.go @@ -26,7 +26,9 @@ func NewSyncedReadCloser(r io.ReadCloser) *SyncedReadCloser { if err != nil { return nil } - r.Close() + defer func() { + _ = r.Close() + }() s.length = int64(len(s.data)) s.openGate = make(chan struct{}) s.enableBlocking = true diff --git a/pkg/protocols/http/request.go b/pkg/protocols/http/request.go index 110adfbc0..37c13ea38 100644 --- a/pkg/protocols/http/request.go +++ b/pkg/protocols/http/request.go @@ -745,8 +745,8 @@ func (request *Request) executeRequest(input *contextargs.Context, generatedRequ }) } else { //** For Normal requests **// - hostname = generatedRequest.request.URL.Host - formedURL = generatedRequest.request.URL.String() + hostname = generatedRequest.request.Host + formedURL = generatedRequest.request.String() // if nuclei-project is available check if the request was already sent previously if request.options.ProjectFile != nil { // if unavailable fail silently @@ -827,7 +827,7 @@ func (request *Request) executeRequest(input *contextargs.Context, generatedRequ // rawhttp doesn't support draining response bodies. if resp != nil && resp.Body != nil && generatedRequest.rawRequest == nil && !generatedRequest.original.Pipeline { _, _ = io.CopyN(io.Discard, resp.Body, drainReqSize) - resp.Body.Close() + _ = resp.Body.Close() } request.options.Output.Request(request.options.TemplatePath, formedURL, request.Type().String(), err) request.options.Progress.IncrementErrorsBy(1) @@ -922,7 +922,7 @@ func (request *Request) executeRequest(input *contextargs.Context, generatedRequ } } if generatedRequest.request != nil { - matchedURL = generatedRequest.request.URL.String() + matchedURL = generatedRequest.request.String() } // Give precedence to the final URL from response if respChain.Request() != nil { diff --git a/pkg/protocols/http/request_annotations.go b/pkg/protocols/http/request_annotations.go index fa2a5eaed..1d01f8c96 100644 --- a/pkg/protocols/http/request_annotations.go +++ b/pkg/protocols/http/request_annotations.go @@ -76,9 +76,9 @@ func (r *Request) parseAnnotations(rawRequest string, request *retryablehttp.Req // handle scheme switch { case stringsutil.HasPrefixI(value, "http://"): - request.URL.Scheme = "http" + request.Scheme = "http" case stringsutil.HasPrefixI(value, "https://"): - request.URL.Scheme = "https" + request.Scheme = "https" } value = stringsutil.TrimPrefixAny(value, "http://", "https://") @@ -87,7 +87,7 @@ func (r *Request) parseAnnotations(rawRequest string, request *retryablehttp.Req request.URL.Host = value } else { hostPort := value - port := request.URL.Port() + port := request.Port() if port != "" { hostPort = net.JoinHostPort(hostPort, port) } diff --git a/pkg/protocols/http/request_annotations_test.go b/pkg/protocols/http/request_annotations_test.go index 3ca54d05c..778a0cb72 100644 --- a/pkg/protocols/http/request_annotations_test.go +++ b/pkg/protocols/http/request_annotations_test.go @@ -23,7 +23,7 @@ func TestRequestParseAnnotationsSNI(t *testing.T) { overrides, modified := req.parseAnnotations(rawRequest, httpReq) require.True(t, modified, "could not apply request annotations") require.Equal(t, "github.com", overrides.request.TLS.ServerName) - require.Equal(t, "example.com", overrides.request.URL.Hostname()) + require.Equal(t, "example.com", overrides.request.Host) }) t.Run("non-compliant-SNI-value", func(t *testing.T) { req := &Request{connConfiguration: &httpclientpool.Configuration{}} @@ -37,7 +37,7 @@ func TestRequestParseAnnotationsSNI(t *testing.T) { overrides, modified := req.parseAnnotations(rawRequest, httpReq) require.True(t, modified, "could not apply request annotations") require.Equal(t, "${jndi:ldap://${hostName}.test.com}", overrides.request.TLS.ServerName) - require.Equal(t, "example.com", overrides.request.URL.Hostname()) + require.Equal(t, "example.com", overrides.request.Host) }) } diff --git a/pkg/protocols/http/request_fuzz.go b/pkg/protocols/http/request_fuzz.go index b207436ad..045dec332 100644 --- a/pkg/protocols/http/request_fuzz.go +++ b/pkg/protocols/http/request_fuzz.go @@ -63,7 +63,7 @@ func (request *Request) executeFuzzingRule(input *contextargs.Context, previous return errors.Wrap(err, "fuzz: could not build request obtained from target file") } request.addHeadersToRequest(baseRequest) - input.MetaInput.Input = baseRequest.URL.String() + input.MetaInput.Input = baseRequest.String() // execute with one value first to checks its applicability err = request.executeAllFuzzingRules(input, previous, baseRequest, callback) if err != nil { @@ -220,9 +220,9 @@ func (request *Request) executeGeneratedFuzzingRequest(gr fuzz.GeneratedRequest, } if request.options.FuzzParamsFrequency != nil && !setInteractshCallback { if !gotMatches { - request.options.FuzzParamsFrequency.MarkParameter(gr.Parameter, gr.Request.URL.String(), request.options.TemplateID) + request.options.FuzzParamsFrequency.MarkParameter(gr.Parameter, gr.Request.String(), request.options.TemplateID) } else { - request.options.FuzzParamsFrequency.UnmarkParameter(gr.Parameter, gr.Request.URL.String(), request.options.TemplateID) + request.options.FuzzParamsFrequency.UnmarkParameter(gr.Parameter, gr.Request.String(), request.options.TemplateID) } } }, 0) @@ -311,7 +311,7 @@ func (request *Request) filterDataMap(input *contextargs.Context) map[string]int if strings.EqualFold(k, "content_type") { m["content_type"] = v } - sb.WriteString(fmt.Sprintf("%s: %s\n", k, v)) + _, _ = fmt.Fprintf(sb, "%s: %s\n", k, v) return true }) m["header"] = sb.String() diff --git a/pkg/protocols/http/request_test.go b/pkg/protocols/http/request_test.go index c0bd2bb34..a6314ae5a 100644 --- a/pkg/protocols/http/request_test.go +++ b/pkg/protocols/http/request_test.go @@ -61,12 +61,12 @@ func TestHTTPExtractMultipleReuse(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/robots.txt": - _, _ = w.Write([]byte(`User-agent: Googlebot + _, _ = fmt.Fprintf(w, `User-agent: Googlebot Disallow: /a Disallow: /b -Disallow: /c`)) +Disallow: /c`) default: - _, _ = w.Write([]byte(fmt.Sprintf(`match %v`, r.URL.Path))) + _, _ = fmt.Fprintf(w, `match %v`, r.URL.Path) } })) defer ts.Close() diff --git a/pkg/protocols/http/signerpool/signerpool.go b/pkg/protocols/http/signerpool/signerpool.go index 65ee50697..f4fecf763 100644 --- a/pkg/protocols/http/signerpool/signerpool.go +++ b/pkg/protocols/http/signerpool/signerpool.go @@ -30,7 +30,7 @@ type Configuration struct { // Hash returns the hash of the configuration to allow client pooling func (c *Configuration) Hash() string { builder := &strings.Builder{} - builder.WriteString(fmt.Sprintf("%v", c.SignerArgs)) + _, _ = fmt.Fprintf(builder, "%v", c.SignerArgs) hash := builder.String() return hash } diff --git a/pkg/protocols/http/utils.go b/pkg/protocols/http/utils.go index 875faaf21..92aa870dc 100644 --- a/pkg/protocols/http/utils.go +++ b/pkg/protocols/http/utils.go @@ -14,7 +14,7 @@ func dump(req *generatedRequest, reqURL string) ([]byte, error) { if req.request != nil { bin, err := req.request.Dump() if err != nil { - return nil, errorutil.NewWithErr(err).WithTag("http").Msgf("could not dump request: %v", req.request.URL.String()) + return nil, errorutil.NewWithErr(err).WithTag("http").Msgf("could not dump request: %v", req.request.String()) } return bin, nil } diff --git a/pkg/protocols/network/request.go b/pkg/protocols/network/request.go index fbdf76493..169099fa4 100644 --- a/pkg/protocols/network/request.go +++ b/pkg/protocols/network/request.go @@ -299,7 +299,9 @@ func (request *Request) executeRequestWithPayloads(variables map[string]interfac request.options.Progress.IncrementFailedRequestsBy(1) return errors.Wrap(err, "could not connect to server") } - defer conn.Close() + defer func() { + _ = conn.Close() + }() _ = conn.SetDeadline(time.Now().Add(time.Duration(request.options.Options.Timeout) * time.Second)) var interactshURLs []string @@ -505,10 +507,11 @@ func getAddress(toTest string) (string, error) { } func ConnReadNWithTimeout(conn net.Conn, n int64, timeout time.Duration) ([]byte, error) { - if n == -1 { + switch n { + case -1: // if n is -1 then read all available data from connection return reader.ConnReadNWithTimeout(conn, -1, timeout) - } else if n == 0 { + case 0: n = 4096 // default buffer size } b := make([]byte, n) diff --git a/pkg/protocols/offlinehttp/find_test.go b/pkg/protocols/offlinehttp/find_test.go index 83249bc97..acbfdf49b 100644 --- a/pkg/protocols/offlinehttp/find_test.go +++ b/pkg/protocols/offlinehttp/find_test.go @@ -30,7 +30,9 @@ func TestFindResponses(t *testing.T) { tempDir, err := os.MkdirTemp("", "test-*") require.Nil(t, err, "could not create temporary directory") - defer os.RemoveAll(tempDir) + defer func() { + _ = os.RemoveAll(tempDir) + }() files := map[string]string{ "test.go": "TEST", diff --git a/pkg/protocols/offlinehttp/read_response_test.go b/pkg/protocols/offlinehttp/read_response_test.go index da1382bac..a82f58843 100644 --- a/pkg/protocols/offlinehttp/read_response_test.go +++ b/pkg/protocols/offlinehttp/read_response_test.go @@ -161,7 +161,7 @@ Server: Google Frontend router := httprouter.New() router.GET("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { w.Header().Add("Server", "Google Frontend") - fmt.Fprintf(w, "%s", ` + _, _ = fmt.Fprintf(w, "%s", ` Firing Range @@ -182,7 +182,9 @@ Server: Google Frontend data, err := client.Get(ts.URL) require.Nil(t, err, "could not dial url") - defer data.Body.Close() + defer func() { + _ = data.Body.Close() + }() b, err := httputil.DumpResponse(data, true) require.Nil(t, err, "could not dump response") diff --git a/pkg/protocols/offlinehttp/request.go b/pkg/protocols/offlinehttp/request.go index 07a0fc2dc..5ff04ef41 100644 --- a/pkg/protocols/offlinehttp/request.go +++ b/pkg/protocols/offlinehttp/request.go @@ -57,7 +57,9 @@ func (request *Request) ExecuteWithResults(input *contextargs.Context, metadata, gologger.Error().Msgf("Could not open file path %s: %s\n", data, err) return } - defer file.Close() + defer func() { + _ = file.Close() + }() stat, err := file.Stat() if err != nil { diff --git a/pkg/protocols/ssl/ssl.go b/pkg/protocols/ssl/ssl.go index fd0dae83d..efed70fdd 100644 --- a/pkg/protocols/ssl/ssl.go +++ b/pkg/protocols/ssl/ssl.go @@ -108,6 +108,7 @@ func (request *Request) TmplClusterKey() uint64 { } func (request *Request) IsClusterable() bool { + // nolint return !(len(request.CipherSuites) > 0 || request.MinVersion != "" || request.MaxVersion != "") } diff --git a/pkg/protocols/utils/variables.go b/pkg/protocols/utils/variables.go index 5e5287420..00f22a118 100644 --- a/pkg/protocols/utils/variables.go +++ b/pkg/protocols/utils/variables.go @@ -120,9 +120,10 @@ func generateVariables(inputURL *urlutil.URL, removeTrailingSlash bool) map[stri parsed.Params = urlutil.NewOrderedParams() port := parsed.Port() if port == "" { - if parsed.Scheme == "https" { + switch parsed.Scheme { + case "https": port = "443" - } else if parsed.Scheme == "http" { + case "http": port = "80" } } diff --git a/pkg/protocols/websocket/websocket.go b/pkg/protocols/websocket/websocket.go index 8eeeedf21..fbb5b0777 100644 --- a/pkg/protocols/websocket/websocket.go +++ b/pkg/protocols/websocket/websocket.go @@ -233,7 +233,9 @@ func (request *Request) executeRequestWithPayloads(target *contextargs.Context, requestOptions.Progress.IncrementFailedRequestsBy(1) return errors.Wrap(err, "could not connect to server") } - defer conn.Close() + defer func() { + _ = conn.Close() + }() responseBuilder := &strings.Builder{} if readBuffer != nil { diff --git a/pkg/reporting/dedupe/dedupe.go b/pkg/reporting/dedupe/dedupe.go index 1ac7a0b2d..ae7b47c48 100644 --- a/pkg/reporting/dedupe/dedupe.go +++ b/pkg/reporting/dedupe/dedupe.go @@ -64,9 +64,9 @@ func (s *Storage) Clear() { // Close closes the storage for further operations func (s *Storage) Close() { - s.storage.Close() + _ = s.storage.Close() if s.temporary != "" { - os.RemoveAll(s.temporary) + _ = os.RemoveAll(s.temporary) } } diff --git a/pkg/reporting/dedupe/dedupe_test.go b/pkg/reporting/dedupe/dedupe_test.go index 0a6d84b0f..74621a798 100644 --- a/pkg/reporting/dedupe/dedupe_test.go +++ b/pkg/reporting/dedupe/dedupe_test.go @@ -12,7 +12,9 @@ import ( func TestDedupeDuplicates(t *testing.T) { tempDir, err := os.MkdirTemp("", "nuclei") require.Nil(t, err, "could not create temporary storage") - defer os.RemoveAll(tempDir) + defer func() { + _ = os.RemoveAll(tempDir) + }() storage, err := New(tempDir) require.Nil(t, err, "could not create duplicate storage") diff --git a/pkg/reporting/exporters/es/elasticsearch.go b/pkg/reporting/exporters/es/elasticsearch.go index 9620eeb3d..8f1466087 100644 --- a/pkg/reporting/exporters/es/elasticsearch.go +++ b/pkg/reporting/exporters/es/elasticsearch.go @@ -134,7 +134,9 @@ func (exporter *Exporter) Export(event *output.ResultEvent) error { if err != nil { return err } - defer res.Body.Close() + defer func() { + _ = res.Body.Close() + }() b, err = io.ReadAll(res.Body) if err != nil { diff --git a/pkg/reporting/exporters/markdown/markdown.go b/pkg/reporting/exporters/markdown/markdown.go index b294c971e..fb1d4df0f 100644 --- a/pkg/reporting/exporters/markdown/markdown.go +++ b/pkg/reporting/exporters/markdown/markdown.go @@ -62,7 +62,9 @@ func (exporter *Exporter) Export(event *output.ResultEvent) error { if err != nil { return err } - defer file.Close() + defer func() { + _ = file.Close() + }() filename := createFileName(event) diff --git a/pkg/reporting/format/format_utils.go b/pkg/reporting/format/format_utils.go index 92976d30f..cfdb2abd1 100644 --- a/pkg/reporting/format/format_utils.go +++ b/pkg/reporting/format/format_utils.go @@ -45,14 +45,14 @@ var ( func CreateReportDescription(event *output.ResultEvent, formatter ResultFormatter, omitRaw bool) string { template := GetMatchedTemplateName(event) builder := &bytes.Buffer{} - builder.WriteString(fmt.Sprintf("%s: %s matched at %s\n\n", formatter.MakeBold("Details"), formatter.MakeBold(template), event.Host)) + _, _ = fmt.Fprintf(builder, "%s: %s matched at %s\n\n", formatter.MakeBold("Details"), formatter.MakeBold(template), event.Host) attributes := utils.NewEmptyInsertionOrderedStringMap(3) attributes.Set("Protocol", strings.ToUpper(event.Type)) attributes.Set("Full URL", event.Matched) attributes.Set("Timestamp", event.Timestamp.Format("Mon Jan 2 15:04:05 -0700 MST 2006")) attributes.ForEach(func(key string, data interface{}) { - builder.WriteString(fmt.Sprintf("%s: %s\n\n", formatter.MakeBold(key), types.ToString(data))) + _, _ = fmt.Fprintf(builder, "%s: %s\n\n", formatter.MakeBold(key), types.ToString(data)) }) if len(ReportGenerationMetadataHooks) > 0 { @@ -120,12 +120,12 @@ func CreateReportDescription(event *output.ResultEvent, formatter ResultFormatte } } if event.Interaction != nil { - builder.WriteString(fmt.Sprintf("%s\n%s", formatter.MakeBold("Interaction Data"), formatter.CreateHorizontalLine())) + _, _ = fmt.Fprintf(builder, "%s\n%s", formatter.MakeBold("Interaction Data"), formatter.CreateHorizontalLine()) builder.WriteString(event.Interaction.Protocol) if event.Interaction.QType != "" { - builder.WriteString(fmt.Sprintf(" (%s)", event.Interaction.QType)) + _, _ = fmt.Fprintf(builder, " (%s)", event.Interaction.QType) } - builder.WriteString(fmt.Sprintf(" Interaction from %s at %s", event.Interaction.RemoteAddress, event.Interaction.UniqueID)) + _, _ = fmt.Fprintf(builder, " Interaction from %s at %s", event.Interaction.RemoteAddress, event.Interaction.UniqueID) if event.Interaction.RawRequest != "" { builder.WriteString(formatter.CreateCodeBlock("Interaction Request", event.Interaction.RawRequest, "")) @@ -157,7 +157,7 @@ func CreateReportDescription(event *output.ResultEvent, formatter ResultFormatte } builder.WriteString("\n" + formatter.CreateHorizontalLine() + "\n") - builder.WriteString(fmt.Sprintf("Generated by %s", formatter.CreateLink("Nuclei "+config.Version, "https://github.com/projectdiscovery/nuclei"))) + _, _ = fmt.Fprintf(builder, "Generated by %s", formatter.CreateLink("Nuclei "+config.Version, "https://github.com/projectdiscovery/nuclei")) data := builder.String() return data } diff --git a/pkg/reporting/reporting.go b/pkg/reporting/reporting.go index 778bc9dd5..100f35743 100644 --- a/pkg/reporting/reporting.go +++ b/pkg/reporting/reporting.go @@ -229,7 +229,9 @@ func CreateConfigIfNotExists() error { if err != nil { return errorutil.NewWithErr(err).Msgf("could not create config file") } - defer reportingFile.Close() + defer func() { + _ = reportingFile.Close() + }() err = yaml.NewEncoder(reportingFile).Encode(options) return err @@ -272,7 +274,7 @@ func (c *ReportingClient) Close() { c.dedupe.Close() } for _, exporter := range c.exporters { - exporter.Close() + _ = exporter.Close() } } diff --git a/pkg/reporting/trackers/linear/linear.go b/pkg/reporting/trackers/linear/linear.go index 7a934a727..243baefe5 100644 --- a/pkg/reporting/trackers/linear/linear.go +++ b/pkg/reporting/trackers/linear/linear.go @@ -384,7 +384,9 @@ func (i *Integration) doGraphqlRequest(ctx context.Context, query string, v any, if err != nil { return err } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() if resp.StatusCode != http.StatusOK { body, _ := io.ReadAll(resp.Body) return fmt.Errorf("non-200 OK status code: %v body: %q", resp.Status, body) diff --git a/pkg/scan/charts/charts.go b/pkg/scan/charts/charts.go index 44f842fd8..fde60422c 100644 --- a/pkg/scan/charts/charts.go +++ b/pkg/scan/charts/charts.go @@ -54,7 +54,9 @@ func NewScanEventsCharts(eventsDir string) (*ScanEventsCharts, error) { if err != nil { return nil, err } - defer f.Close() + defer func() { + _ = f.Close() + }() data := []events.ScanEvent{} dec := json.NewDecoder(f) diff --git a/pkg/scan/charts/echarts.go b/pkg/scan/charts/echarts.go index 69960588d..19f2c251f 100644 --- a/pkg/scan/charts/echarts.go +++ b/pkg/scan/charts/echarts.go @@ -30,7 +30,9 @@ func (s *ScanEventsCharts) GenerateHTML(filePath string) error { if err != nil { return err } - defer output.Close() + defer func() { + _ = output.Close() + }() return page.Render(output) } @@ -69,7 +71,7 @@ func (s *ScanEventsCharts) totalRequestsOverTime(c echo.Context) *charts.Line { }), ) - var startTime time.Time = time.Now() + startTime := time.Now() var endTime time.Time for _, event := range s.data { @@ -135,7 +137,7 @@ func (s *ScanEventsCharts) topSlowTemplates(c echo.Context) *charts.Kline { }), ) ids := map[string][]int64{} - var startTime time.Time = time.Now() + startTime := time.Now() for _, event := range s.data { if event.Time.Before(startTime) { startTime = event.Time diff --git a/pkg/templates/cluster.go b/pkg/templates/cluster.go index 03ad79c60..8008eb0e5 100644 --- a/pkg/templates/cluster.go +++ b/pkg/templates/cluster.go @@ -201,15 +201,16 @@ func NewClusterExecuter(requests []*Template, options *protocols.ExecutorOptions }) } for _, req := range requests { - if executer.templateType == types.DNSProtocol { + switch executer.templateType { + case types.DNSProtocol: if req.RequestsDNS[0].CompiledOperators != nil { appendOperator(req, req.RequestsDNS[0].CompiledOperators) } - } else if executer.templateType == types.HTTPProtocol { + case types.HTTPProtocol: if req.RequestsHTTP[0].CompiledOperators != nil { appendOperator(req, req.RequestsHTTP[0].CompiledOperators) } - } else if executer.templateType == types.SSLProtocol { + case types.SSLProtocol: if req.RequestsSSL[0].CompiledOperators != nil { appendOperator(req, req.RequestsSSL[0].CompiledOperators) } diff --git a/pkg/templates/compile.go b/pkg/templates/compile.go index d8b568957..47097947e 100644 --- a/pkg/templates/compile.go +++ b/pkg/templates/compile.go @@ -75,7 +75,9 @@ func Parse(filePath string, preprocessor Preprocessor, options protocols.Executo } } - defer reader.Close() + defer func() { + _ = reader.Close() + }() options.TemplatePath = filePath template, err := ParseTemplateFromReader(reader, preprocessor, options.Copy()) @@ -460,6 +462,7 @@ func parseTemplate(data []byte, options protocols.ExecutorOptions) (*Template, e } } options.TemplateVerifier = template.TemplateVerifier + //nolint if !(template.Verified && verifier.Identifier() == "projectdiscovery/nuclei-templates") { template.Options.RawTemplate = data } diff --git a/pkg/templates/parser.go b/pkg/templates/parser.go index c946fbb7b..a8c460094 100644 --- a/pkg/templates/parser.go +++ b/pkg/templates/parser.go @@ -96,7 +96,9 @@ func (p *Parser) ParseTemplate(templatePath string, catalog catalog.Catalog) (an if err != nil { return nil, err } - defer reader.Close() + defer func() { + _ = reader.Close() + }() data, err := io.ReadAll(reader) if err != nil { diff --git a/pkg/templates/templates.go b/pkg/templates/templates.go index 942988cf8..7726fc7c9 100644 --- a/pkg/templates/templates.go +++ b/pkg/templates/templates.go @@ -187,7 +187,7 @@ func (template *Template) Type() types.ProtocolType { return types.CodeProtocol case len(template.RequestsJavascript) > 0: return types.JavascriptProtocol - case len(template.Workflow.Workflows) > 0: + case len(template.Workflows) > 0: return types.WorkflowProtocol default: return types.InvalidProtocol @@ -389,7 +389,9 @@ func (template *Template) ImportFileRefs(options *protocols.ExecutorOptions) err // load file respecting sandbox data, err := options.Options.LoadHelperFile(source, options.TemplatePath, options.Catalog) if err == nil { - defer data.Close() + defer func() { + _ = data.Close() + }() bin, err := io.ReadAll(data) if err == nil { return string(bin), true diff --git a/pkg/testutils/fuzzplayground/db.go b/pkg/testutils/fuzzplayground/db.go index 8344f5dc4..87c490a70 100644 --- a/pkg/testutils/fuzzplayground/db.go +++ b/pkg/testutils/fuzzplayground/db.go @@ -134,7 +134,9 @@ func getUnsanitizedPostsByLang(db *sql.DB, lang string) ([]Posts, error) { if err != nil { return nil, err } - defer rows.Close() + defer func() { + _ = rows.Close() + }() for rows.Next() { var post Posts diff --git a/pkg/testutils/fuzzplayground/server.go b/pkg/testutils/fuzzplayground/server.go index af42552cb..5278c1236 100644 --- a/pkg/testutils/fuzzplayground/server.go +++ b/pkg/testutils/fuzzplayground/server.go @@ -80,7 +80,9 @@ func requestHandler(ctx echo.Context) error { if err != nil { return ctx.HTML(500, err.Error()) } - defer data.Body.Close() + defer func() { + _ = data.Body.Close() + }() body, _ := io.ReadAll(data.Body) return ctx.HTML(200, fmt.Sprintf(bodyTemplate, string(body))) @@ -172,7 +174,9 @@ func resetPasswordHandler(c echo.Context) error { if err != nil { return c.JSON(500, "Something went wrong") } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() return c.JSON(200, "Password reset successfully") } @@ -184,7 +188,9 @@ func hostHeaderLabHandler(c echo.Context) error { if err != nil { return c.JSON(500, "Something went wrong") } - defer resp.Body.Close() + defer func() { + _ = resp.Body.Close() + }() c.Response().Header().Set("Content-Type", resp.Header.Get("Content-Type")) c.Response().WriteHeader(resp.StatusCode) _, err = io.Copy(c.Response().Writer, resp.Body) diff --git a/pkg/testutils/integration.go b/pkg/testutils/integration.go index d423be462..d93e87011 100644 --- a/pkg/testutils/integration.go +++ b/pkg/testutils/integration.go @@ -323,7 +323,7 @@ func NewTCPServer(tlsConfig *tls.Config, port int, handler func(conn net.Conn)) // Close closes the TCP server func (s *TCPServer) Close() { - s.listener.Close() + _ = s.listener.Close() } // NewWebsocketServer creates a new websocket server from a handler @@ -338,7 +338,9 @@ func NewWebsocketServer(path string, handler func(conn net.Conn), originValidate return } go func() { - defer conn.Close() + defer func() { + _ = conn.Close() + }() handler(conn) }() diff --git a/pkg/tmplexec/flow/flow_executor.go b/pkg/tmplexec/flow/flow_executor.go index 206914e08..7592adef7 100644 --- a/pkg/tmplexec/flow/flow_executor.go +++ b/pkg/tmplexec/flow/flow_executor.go @@ -208,7 +208,6 @@ func (f *FlowExecutor) ExecuteWithResults(ctx *scan.ScanContext) error { // TODO(dwisiswant0): remove this once we get the RCA. defer func() { - return if ci.IsCI() { return } @@ -292,7 +291,9 @@ func (f *FlowExecutor) ReadDataFromFile(payload string) ([]string, error) { if err != nil { return values, err } - defer reader.Close() + defer func() { + _ = reader.Close() + }() bin, err := io.ReadAll(reader) if err != nil { return values, err diff --git a/pkg/tmplexec/flow/flow_internal.go b/pkg/tmplexec/flow/flow_internal.go index 1738eb023..9a8d807cc 100644 --- a/pkg/tmplexec/flow/flow_internal.go +++ b/pkg/tmplexec/flow/flow_internal.go @@ -20,7 +20,7 @@ func (f *FlowExecutor) requestExecutor(runtime *goja.Runtime, reqMap mapsutil.Ma f.options.GetTemplateCtx(f.ctx.Input.MetaInput).Merge(variableMap) // merge all variables into template context // to avoid polling update template variables everytime we execute a protocol - var m map[string]interface{} = f.options.GetTemplateCtx(f.ctx.Input.MetaInput).GetAll() + m := f.options.GetTemplateCtx(f.ctx.Input.MetaInput).GetAll() _ = runtime.Set("template", m) }() matcherStatus := &atomic.Bool{} // due to interactsh matcher polling logic this needs to be atomic bool