缺少错误检查¶
ID: go/missing-error-check
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- reliability
- correctness
- logic
Query suites:
- go-security-and-quality.qls
当函数调用返回两个值(指针和错误的子类型)时,通常假设在检查指针或错误值之前,该指针可能为 nil。
如果在未经检查的情况下解引用指针,则可能会发生意外的 nil 指针解引用 panic。
建议¶
确保在使用返回的指针之前,直接检查返回的指针是否为 nil,或者检查错误值。
示例¶
在下面的示例中,user
解引用 ptr
,而没有检查 ptr
或 err
。这可能会导致 panic。
package main
import (
"fmt"
"os"
)
func user(input string) {
ptr, err := os.Open(input)
// BAD: ptr is dereferenced before either it or `err` has been checked.
fmt.Printf("Opened %v\n", *ptr)
if err != nil {
fmt.Printf("Bad input: %s\n", input)
}
}
更正后的 user
版本在使用 ptr
之前会检查 err
。
package main
import (
"fmt"
"os"
)
func user(input string) {
ptr, err := os.Open(input)
if err != nil {
fmt.Printf("Bad input: %s\n", input)
return
}
// GOOD: `err` has been checked before `ptr` is used
fmt.Printf("Result was %v\n", *ptr)
}
参考¶
Go 博客:错误处理和 Go。