Skip to content

Commit 0709026

Browse files
committed
Merge branch 'main' of https://github.com/gorilla/websocket
1 parent 0852947 commit 0709026

File tree

11 files changed

+101
-91
lines changed

11 files changed

+101
-91
lines changed

.github/workflows/issues.yml

Lines changed: 0 additions & 21 deletions
This file was deleted.

.github/workflows/security.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Security
2+
on: [push, pull_request]
3+
jobs:
4+
test:
5+
strategy:
6+
matrix:
7+
go-version: [1.18.x, 1.19.x, 1.20.x, 1.21.x]
8+
os: [ubuntu-latest]
9+
runs-on: ${{ matrix.os }}
10+
steps:
11+
- uses: actions/checkout@v3
12+
- uses: actions/setup-go@v4
13+
with:
14+
go-version: ${{ matrix.go-version }}
15+
- run: go version
16+
- run: go get -t -v ./...
17+
- run: go vet $(go list ./... | grep -v /vendor/)
18+
19+
- name: Run GoSec
20+
if: matrix.os == 'ubuntu-latest'
21+
uses: securego/gosec@master
22+
with:
23+
args: -exclude-dir _examples ./...
24+
25+
# - name: Run GoVulnCheck
26+
# if: matrix.go-version != '1.18.x' && matrix.go-version != '1.19.x'
27+
# uses: golang/govulncheck-action@v1
28+
# with:
29+
# go-version-input: ${{ matrix.go-version }}
30+
# go-package: ./...

.github/workflows/test.yml

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ on: [push, pull_request]
33
jobs:
44
test:
55
strategy:
6+
fail-fast: false
67
matrix:
78
go-version: [1.18.x, 1.19.x, 1.20.x, 1.21.x]
89
os: [ubuntu-latest, macos-latest, windows-latest]
@@ -15,23 +16,5 @@ jobs:
1516
- run: go version
1617
- run: go get -t -v ./...
1718
- run: go vet $(go list ./... | grep -v /vendor/)
18-
- run: go test -v -cover -race ./...
19-
20-
- name: Run GolangCI-Lint
21-
uses: golangci/golangci-lint-action@v3
22-
with:
23-
version: v1.53
24-
args: --timeout=5m
2519

26-
- name: Run GoSec
27-
if: matrix.os == 'ubuntu-latest'
28-
uses: securego/gosec@master
29-
with:
30-
args: -exclude-dir _examples ./...
31-
32-
- name: Run GoVulnCheck
33-
if: matrix.go-version != '1.17.x' && matrix.go-version != '1.18.x'
34-
uses: golang/govulncheck-action@v1
35-
with:
36-
go-version-input: ${{ matrix.go-version }}
37-
go-package: ./...
20+
- run: go test -v -cover -race ./...

.github/workflows/verify.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: Verify
2+
on: [push, pull_request]
3+
jobs:
4+
test:
5+
runs-on: ubuntu-latest
6+
steps:
7+
- uses: actions/checkout@v3
8+
9+
- name: Run GolangCI-Lint
10+
uses: golangci/golangci-lint-action@v3
11+
with:
12+
version: v1.53
13+
args: --timeout=5m

client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h
398398
}
399399
}
400400

401-
if resp.StatusCode != 101 ||
401+
if resp.StatusCode != http.StatusSwitchingProtocols ||
402402
!tokenListContainsValue(resp.Header, "Upgrade", "websocket") ||
403403
!tokenListContainsValue(resp.Header, "Connection", "upgrade") ||
404404
resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) {

conn.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1238,7 +1238,8 @@ func (c *Conn) SetCloseHandler(h func(code int, text string) error) {
12381238
if h == nil {
12391239
h = func(code int, text string) error {
12401240
message := FormatCloseMessage(code, "")
1241-
if err := c.WriteControl(CloseMessage, message, time.Now().Add(writeWait)); err != nil {
1241+
err := c.WriteControl(CloseMessage, message, time.Now().Add(writeWait))
1242+
if err != nil && err != ErrCloseSent {
12421243
return err
12431244
}
12441245
return nil

conn_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,26 @@ func TestWriteAfterMessageWriterClose(t *testing.T) {
477477
}
478478
}
479479

480+
func TestWriteHandlerDoesNotReturnErrCloseSent(t *testing.T) {
481+
var b1, b2 bytes.Buffer
482+
483+
client := newTestConn(&b2, &b1, false)
484+
server := newTestConn(&b1, &b2, true)
485+
486+
msg := FormatCloseMessage(CloseNormalClosure, "")
487+
if err := client.WriteMessage(CloseMessage, msg); err != nil {
488+
t.Fatalf("unexpected error when writing close message, %v", err)
489+
}
490+
491+
if _, _, err := server.NextReader(); !IsCloseError(err, 1000) {
492+
t.Fatalf("server expects a close message, %v returned", err)
493+
}
494+
495+
if _, _, err := client.NextReader(); !IsCloseError(err, 1000) {
496+
t.Fatalf("client expects a close message, %v returned", err)
497+
}
498+
}
499+
480500
func TestReadLimit(t *testing.T) {
481501
t.Run("Test ReadLimit is enforced", func(t *testing.T) {
482502
const readLimit = 512

go.sum

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
22
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
3-
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
4-
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
53
github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4slzwA=
64
github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
75
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee h1:8Iv5m6xEo1NR1AvpV+7XmhI4r39LGNzwUL4YpMuL5vk=
@@ -10,49 +8,5 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw
108
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
119
github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA=
1210
github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
13-
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
14-
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
15-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
16-
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
17-
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
18-
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
19-
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
20-
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
21-
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
22-
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
23-
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
24-
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
25-
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
26-
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
2711
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
2812
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
29-
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
30-
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
31-
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
32-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
33-
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
34-
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
35-
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
36-
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
37-
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
38-
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
39-
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
40-
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
41-
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
42-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
43-
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
44-
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
45-
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
46-
golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
47-
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
48-
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
49-
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
50-
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
51-
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
52-
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
53-
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
54-
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
55-
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
56-
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
57-
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
58-
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

proxy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error)
7575
return nil, err
7676
}
7777

78-
if resp.StatusCode != 200 {
78+
if resp.StatusCode != http.StatusOK {
7979
if err := conn.Close(); err != nil {
8080
log.Printf("httpProxyDialer: failed to close connection: %v", err)
8181
}

server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ func checkSameOrigin(r *http.Request) bool {
104104
func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string {
105105
if u.Subprotocols != nil {
106106
clientProtocols := Subprotocols(r)
107-
for _, serverProtocol := range u.Subprotocols {
108-
for _, clientProtocol := range clientProtocols {
107+
for _, clientProtocol := range clientProtocols {
108+
for _, serverProtocol := range u.Subprotocols {
109109
if clientProtocol == serverProtocol {
110110
return clientProtocol
111111
}

0 commit comments

Comments
 (0)