Skip to content

Commit

Permalink
Handle no status in FormatCloseMessage
Browse files Browse the repository at this point in the history
Return empty message for CloseNoStatusReceived. This status indicates
that the message is empty, so make it so. Because it's illegal to send
CloseNoStatusReceived, this change should not break a correct
application.
  • Loading branch information
garyburd authored Dec 28, 2017
1 parent cdedf21 commit d965e9a
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -1061,10 +1061,7 @@ func (c *Conn) CloseHandler() func(code int, text string) error {
func (c *Conn) SetCloseHandler(h func(code int, text string) error) {
if h == nil {
h = func(code int, text string) error {
message := []byte{}
if code != CloseNoStatusReceived {
message = FormatCloseMessage(code, "")
}
message := FormatCloseMessage(code, "")
c.WriteControl(CloseMessage, message, time.Now().Add(writeWait))
return nil
}
Expand Down Expand Up @@ -1142,7 +1139,14 @@ func (c *Conn) SetCompressionLevel(level int) error {
}

// FormatCloseMessage formats closeCode and text as a WebSocket close message.
// An empty message is returned for code CloseNoStatusReceived.
func FormatCloseMessage(closeCode int, text string) []byte {
if closeCode == CloseNoStatusReceived {
// Return empty message because it's illegal to send
// CloseNoStatusReceived. Return non-nil value in case application
// checks for nil.
return []byte{}
}
buf := make([]byte, 2+len(text))
binary.BigEndian.PutUint16(buf, uint16(closeCode))
copy(buf[2:], text)
Expand Down

0 comments on commit d965e9a

Please sign in to comment.