mirror of
https://github.com/valyala/fasthttp.git
synced 2026-06-14 15:56:44 +03:00
Fix []byte reuse bug
The return value of normalizePath should be a reusable []byte.
Returning strSlash could cause the strSlash constant to be reused and
resulted in very weird behavior. This specific case of normalizePath
almost never happens which made it even harder to spot.
The race detector on Windows was the only clue that something was
happening:
WARNING: DATA RACE
Write at 0x000001d082e3 by goroutine 446:
github.com/valyala/fasthttp.addLeadingSlash()
D:/a/fasthttp/fasthttp/uri_windows.go:8 +0xa5
github.com/valyala/fasthttp.normalizePath()
D:/a/fasthttp/fasthttp/uri.go:343 +0xbd
github.com/valyala/fasthttp.(*URI).parse()
D:/a/fasthttp/fasthttp/uri.go:314 +0x1606
github.com/valyala/fasthttp.(*URI).Parse()
D:/a/fasthttp/fasthttp/uri.go:266 +0xb3
github.com/valyala/fasthttp.testURIPathNormalize()
D:/a/fasthttp/fasthttp/uri_test.go:195 +0x47
github.com/valyala/fasthttp.TestURIPathNormalize()
D:/a/fasthttp/fasthttp/uri_test.go:176 +0x38e
testing.tRunner()
C:/hostedtoolcache/windows/go/1.15.15/x64/src/testing/testing.go:1123 +0x202
Previous read at 0x000001d082e3 by goroutine 332:
runtime.slicecopy()
C:/hostedtoolcache/windows/go/1.15.15/x64/src/runtime/slice.go:246 +0x0
github.com/valyala/fasthttp.(*RequestHeader).AppendBytes()
D:/a/fasthttp/fasthttp/header.go:1726 +0x24d
github.com/valyala/fasthttp.(*RequestHeader).Header()
D:/a/fasthttp/fasthttp/header.go:1698 +0x84
github.com/valyala/fasthttp.(*RequestHeader).Write()
D:/a/fasthttp/fasthttp/header.go:1682 +0x10f
github.com/valyala/fasthttp.(*Request).Write()
D:/a/fasthttp/fasthttp/http.go:1370 +0x1ab
github.com/valyala/fasthttp.testRequestSuccess()
D:/a/fasthttp/fasthttp/http_test.go:1788 +0x32a
github.com/valyala/fasthttp.TestRequestSuccess()
D:/a/fasthttp/fasthttp/http_test.go:1678 +0x2dd
testing.tRunner()
C:/hostedtoolcache/windows/go/1.15.15/x64/src/testing/testing.go:1123 +0x202
This commit is contained in:
Reference in New Issue
Block a user