github / github/codeql

Whether the codeql result contains function call chain information.

未关闭
#18,796 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
question
主要语言
CodeQL
星标
10.1k
派生
2.1k
平均合并
2 天 15 小时
30 天内合并 PR
141

描述

test code:
```
[root@*** test_case]# cat f_open_test_0.cpp
#include
#include
using namespace std;

const char * do_getenv1(const char * name) {
return getenv(name);
}
[root@*** test_case]# cat f_open_test_a.cpp
#include "f_open_test_0.cpp"
extern const char * do_getenv1(const char *);

const char * do_getenv() {
return do_getenv1("FILENAME1");
}

[root@*** test_case]# cat f_open_test_b.cpp
#include "f_open_test_a.cpp"
extern const char * do_getenv();

int main(){
const char * filename1 = do_getenv();
FILE * file1 = fopen(filename1, "r");
}
```
running rule:
fopen-flow-from-getenv.ql

but results file don't contain the function call chain, results like this:
```
"results": [{
"ruleId": "cpp/huawei/member-variable-to-resource-leak",
"ruleIndex": 0,
"rule": {
"id": "cpp/huawei/member-variable-to-resource-leak",
"index": 0
},
"message": {
"text": "This 'fopen' uses data from [call to 'getenv'](1)."
},
"locations": [{
"physicalLocation": {
"artifactLocation": {
"uri": "f_open_test_b.cpp",
"uriBaseId": "%SRCROOT%",
"index": 0
},
"region": {
"startLine": 6,
"startColumn": 26,
"endColumn": 35
},
"contextRegion": {
"startLine": 4,
"endLine": 8,
"snippet": {
"text": "int main(){\n const char * filename1 = do_getenv();\n FILE * file1 = fopen(filename1, \"r\");\n}\n\n"
}
}
}
}],
"partialFingerprints": {
"primaryLocationLineHash": "6f35e497d744c2f6:1",
"primaryLocationStartColumnFingerprint": "21"
},
"relatedLocations": [{
"id": 1,
"physicalLocation": {
"artifactLocation": {
"uri": "f_open_test_0.cpp",
"uriBaseId": "%SRCROOT%",
"index": 1
},
"region": {
"startLine": 6,
"startColumn": 12,
"endColumn": 18
},
"contextRegion": {
"startLine": 4,
"endLine": 7,
"snippet": {
"text": "\nconst char * do_getenv1(const char * name) {\n return getenv(name);\n}\n"
}
}
},
"message": {
"text": "call to 'getenv'"
}
}]
}],
"columnKind": "utf16CodeUnits",
"properties": {
"semmle.formatSpecifier": "sarif-latest"
}
}]
```

贡献指南

打开贡献指南

调研方向

Start by reproducing the example with f_open_test_0.cpp, f_open_test_a.cpp, and f_open_test_b.cpp using fopen-flow-from-getenv.ql, then inspect the generated SARIF result and its relatedLocations entry. Determine whether the expected function call chain is represented in the result and document the behavior or missing change.

由索引模型根据 Issue 内容生成。

评估

技术栈
cpp
领域
devtools, security
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
需要澄清
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。