ソースを参照

panic if err is nil on c.Error

A panic here provides a more informative stack trace than the panic which would otherwise occur while errors are being collected.
Ammar Bandukwala 8 年 前
コミット
781cbd19f0
2 ファイル変更11 行追加0 行削除
  1. 4 0
      context.go
  2. 7 0
      context_test.go

+ 4 - 0
context.go

@@ -144,7 +144,11 @@ func (c *Context) AbortWithError(code int, err error) *Error {
 // It's a good idea to call Error for each error that occurred during the resolution of a request.
 // A middleware can be used to collect all the errors
 // and push them to a database together, print a log, or append it in the HTTP response.
+// Error will panic if err is nil.
 func (c *Context) Error(err error) *Error {
+	if err == nil {
+		panic("err is nil")
+	}
 	var parsedError *Error
 	switch err.(type) {
 	case *Error:

+ 7 - 0
context_test.go

@@ -852,6 +852,13 @@ func TestContextError(t *testing.T) {
 	assert.Equal(t, c.Errors[1].Type, ErrorTypePublic)
 
 	assert.Equal(t, c.Errors.Last(), c.Errors[1])
+
+	defer func() {
+		if recover() == nil {
+			t.Error("didn't panic")
+		}
+	}()
+	c.Error(nil)
 }
 
 func TestContextTypedError(t *testing.T) {