如何在Go的CodeQL中获取空字节数组的所有初始化

问题描述 投票:0回答:1

我有一个变量被设置为包中的全局变量(不在函数内):

var myArr []byte = make([]byte, 0)

我想找到所有用

make([]byte, 0)
初始化变量的地方。

这就是我尝试做的:

from AssignStmt assign, Ident id, CallExpr make
where
  assign.getLhs().(Ident) = id and
  make = assign.getRhs().(CallExpr) and
  make.getTarget() = Builtin::make() and
  make.getArgument(0).getType().(ArrayType).getElementType().hasQualifiedName("", "byte") and
  make.getArgument(1).getIntValue() = 0
select assign, id, "This variable is assigned with make([]byte, 0)."

但它没有找到任何东西,尽管我在代码中有这样的行。
根据文档,我似乎需要使用

DeclStmt
来搜索声明的变量。我还在想办法。
感谢 Owen Mansel-Chan 的帮助。他们有一个 Slack,我正在帮忙,但我想也许这里有人会有答案。

go variables codeql
1个回答
0
投票

Owen Mansel-Chan 在 Slack 上回答我:

from VarDecl vd, ValueSpec vs, CallExpr rhs
where
  vs = vd.getASpec() and
  vs.getNumInit() = 1 and
  rhs = vs.getInit(0) and
  rhs.getTarget() = Builtin::make() and
  rhs.getArgument(0).getType().(SliceType).getElementType() = Builtin::byte().getType() and
  rhs.getArgument(1).getIntValue() = 0 and
  not exists(rhs.getEnclosingFunction())
select vd, vs, rhs

我检查了一下,它有效。

© www.soinside.com 2019 - 2024. All rights reserved.