diff options
| author | Shulhan <ms@kilabit.info> | 2019-03-11 04:56:53 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2019-03-11 04:56:53 +0700 |
| commit | 03fb48ee435b9c8da3e68827474cccdba745c8ca (patch) | |
| tree | ac8ab4a7118d6efd6a6cbaeb7b775f1422a37f31 /lib/websocket | |
| parent | 8ec8ed08ef51431fe223dfdf27171571d3dde4fd (diff) | |
| download | pakakeh.go-03fb48ee435b9c8da3e68827474cccdba745c8ca.tar.xz | |
websocket: set payload capability with payload length
This is to minimize re-allocation on fragmented or chopped data frame
received by server.
Diffstat (limited to 'lib/websocket')
| -rw-r--r-- | lib/websocket/frame.go | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/websocket/frame.go b/lib/websocket/frame.go index a4f58fd1..fa65139e 100644 --- a/lib/websocket/frame.go +++ b/lib/websocket/frame.go @@ -283,12 +283,12 @@ func frameUnpack(in []byte) (f *Frame, rest []byte) { } if f.len > 0 { - if len(in)-x < int(f.len) { - f.payload = make([]byte, len(in)-x) - } else { - f.payload = make([]byte, f.len) + f.payload = make([]byte, 0, f.len) + paylen := len(in) - x + if uint64(paylen) > f.len { + paylen = int(f.len) } - copy(f.payload, in[x:]) + f.payload = append(f.payload, in[x:x+paylen]...) if f.masked == frameIsMasked { for y := 0; y < len(f.payload); y++ { |
