瀏覽代碼

Merge pull request #387 from Zariel/catch-panic-in-readTrace

ensure we catch panics in readTrace
Chris Bannister 10 年之前
父節點
當前提交
662397de07
共有 2 個文件被更改,包括 9 次插入8 次删除
  1. 8 8
      frame.go
  2. 1 0
      frame_test.go

+ 8 - 8
frame.go

@@ -376,14 +376,6 @@ func (f *framer) readFrame(head *frameHeader) error {
 }
 
 func (f *framer) parseFrame() (frame frame, err error) {
-	if f.header.version.request() {
-		return nil, NewErrProtocol("got a request frame from server: %v", f.header.version)
-	}
-
-	if f.header.flags&flagTracing == flagTracing {
-		f.readTrace()
-	}
-
 	defer func() {
 		if r := recover(); r != nil {
 			if _, ok := r.(runtime.Error); ok {
@@ -393,6 +385,14 @@ func (f *framer) parseFrame() (frame frame, err error) {
 		}
 	}()
 
+	if f.header.version.request() {
+		return nil, NewErrProtocol("got a request frame from server: %v", f.header.version)
+	}
+
+	if f.header.flags&flagTracing == flagTracing {
+		f.readTrace()
+	}
+
 	// asumes that the frame body has been read into rbuf
 	switch f.header.op {
 	case opError:

+ 1 - 0
frame_test.go

@@ -19,6 +19,7 @@ func TestFuzzBugs(t *testing.T) {
 			"\x00\a000000000\x00\x050000000" +
 			"\xff0000000000000000000" +
 			"0000000"),
+		[]byte("\x82\xe600\x00\x00\x00\x000"),
 	}
 
 	for i, test := range tests {