CodeQL 文档

缺少错误检查

ID: go/missing-error-check
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - reliability
   - correctness
   - logic
Query suites:
   - go-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

当函数调用返回两个值(指针和错误的子类型)时,通常假设在检查指针或错误值之前,该指针可能为 nil。

如果在未经检查的情况下解引用指针,则可能会发生意外的 nil 指针解引用 panic。

建议

确保在使用返回的指针之前,直接检查返回的指针是否为 nil,或者检查错误值。

示例

在下面的示例中,user 解引用 ptr,而没有检查 ptrerr。这可能会导致 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)

}

参考

  • ©2025GitHub 公司
  • 条款
  • 隐私