frame_test.go 823 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package gocql
  2. import (
  3. "bytes"
  4. "testing"
  5. )
  6. func TestFuzzBugs(t *testing.T) {
  7. // these inputs are found using go-fuzz (https://github.com/dvyukov/go-fuzz)
  8. // and should cause a panic unless fixed.
  9. tests := [][]byte{
  10. []byte("00000\xa0000"),
  11. []byte("\x8000\x0e\x00\x00\x00\x000"),
  12. []byte("\x8000\x00\x00\x00\x00\t0000000000"),
  13. []byte("\xa0\xff\x01\xae\xefqE\xf2\x1a"),
  14. }
  15. for i, test := range tests {
  16. t.Logf("test %d input: %q", i, test)
  17. var bw bytes.Buffer
  18. r := bytes.NewReader(test)
  19. head, err := readHeader(r, make([]byte, 9))
  20. if err != nil {
  21. continue
  22. }
  23. framer := newFramer(r, &bw, nil, 3)
  24. err = framer.readFrame(&head)
  25. if err != nil {
  26. continue
  27. }
  28. _, err = framer.parseFrame()
  29. if err != nil {
  30. continue
  31. }
  32. t.Errorf("(%d) expected to fail for input %q", i, test)
  33. }
  34. }