(t *testing.T)
| 271 | } |
| 272 | |
| 273 | func TestWSParseInvalidFrames(t *testing.T) { |
| 274 | |
| 275 | newReader := func() (*fakeReader, *websocketReader) { |
| 276 | mr := &fakeReader{} |
| 277 | r := wsNewReader(mr) |
| 278 | return mr, r |
| 279 | } |
| 280 | |
| 281 | p := make([]byte, 100) |
| 282 | |
| 283 | // Invalid utf-8 of close message |
| 284 | mr, r := newReader() |
| 285 | mr.buf.Write([]byte{136, 6, 3, 232, 't', 'e', 0xF1, 't'}) |
| 286 | n, err := r.Read(p) |
| 287 | if err != io.EOF || n != 0 { |
| 288 | t.Fatalf("Error on read: n=%v err=%v", n, err) |
| 289 | } |
| 290 | |
| 291 | // control frame length too long |
| 292 | mr, r = newReader() |
| 293 | mr.buf.Write([]byte{137, 126, 0, wsMaxControlPayloadSize + 10}) |
| 294 | for i := 0; i < wsMaxControlPayloadSize+10; i++ { |
| 295 | mr.buf.WriteByte('a') |
| 296 | } |
| 297 | n, err = r.Read(p) |
| 298 | if n != 0 || err == nil || !strings.Contains(err.Error(), "maximum") { |
| 299 | t.Fatalf("Unexpected error: n=%v err=%v", n, err) |
| 300 | } |
| 301 | |
| 302 | // Not a final frame |
| 303 | mr, r = newReader() |
| 304 | mr.buf.Write([]byte{byte(wsPingMessage), 0}) |
| 305 | n, err = r.Read(p[:2]) |
| 306 | if n != 0 || err == nil || !strings.Contains(err.Error(), "final") { |
| 307 | t.Fatalf("Unexpected error: n=%v err=%v", n, err) |
| 308 | } |
| 309 | |
| 310 | // Marked as compressed |
| 311 | mr, r = newReader() |
| 312 | mr.buf.Write([]byte{byte(wsPingMessage) | wsRsv1Bit, 0}) |
| 313 | n, err = r.Read(p[:2]) |
| 314 | if n != 0 || err == nil || !strings.Contains(err.Error(), "compressed") { |
| 315 | t.Fatalf("Unexpected error: n=%v err=%v", n, err) |
| 316 | } |
| 317 | |
| 318 | // Continuation frame marked as compressed |
| 319 | mr, r = newReader() |
| 320 | mr.buf.Write([]byte{2, 3}) |
| 321 | mr.buf.WriteString("ABC") |
| 322 | mr.buf.Write([]byte{0 | wsRsv1Bit, 3}) |
| 323 | mr.buf.WriteString("DEF") |
| 324 | n, err = r.Read(p) |
| 325 | if n != 0 || err == nil || !strings.Contains(err.Error(), "invalid continuation frame") { |
| 326 | t.Fatalf("Unexpected error: n=%v err=%v", n, err) |
| 327 | } |
| 328 | |
| 329 | // Continuation frame after a final frame |
| 330 | mr, r = newReader() |
nothing calls this directly
no test coverage detected