From 3e41e402e6dd6f9b5786e733043dd6edfe48e928 Mon Sep 17 00:00:00 2001 From: HD Moore Date: Tue, 15 Jul 2025 01:53:44 -0500 Subject: [PATCH 1/2] fix data race by cloning the url --- request.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/request.go b/request.go index 3be904d..dd97aff 100644 --- a/request.go +++ b/request.go @@ -105,13 +105,17 @@ func (r *Request) BodyBytes() ([]byte, error) { // Update request URL with new changes of parameters if any func (r *Request) Update() { + // Make a copy of the URL to avoid data races + r.URL = r.URL.Clone() r.URL.Update() + r.Request.URL = r.URL.URL updateScheme(r.URL.URL) } // SetURL updates request url (i.e http.Request.URL) with given url func (r *Request) SetURL(u *urlutil.URL) { - r.URL = u + // Make a copy of the URL to avoid data races + r.URL = u.Clone() r.Request.URL = u.URL r.Update() } From 7b909a9fcc61c5663b66198011acaa33d303ca1a Mon Sep 17 00:00:00 2001 From: HD Moore Date: Tue, 15 Jul 2025 02:00:34 -0500 Subject: [PATCH 2/2] simplify to use the already cloned url --- request.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/request.go b/request.go index dd97aff..50d4a44 100644 --- a/request.go +++ b/request.go @@ -123,7 +123,7 @@ func (r *Request) SetURL(u *urlutil.URL) { // Clones and returns new Request func (r *Request) Clone(ctx context.Context) *Request { r.Update() - ux := r.URL.Clone() + ux := r.URL req := r.Request.Clone(ctx) req.URL = ux.URL ux.Update()