如何解决无法从不同的文件夹添加 CodeQL 库:“无法解析模块 <xxx>”
我有以下文件夹结构:
└── MyProj
├── Dangerous_Memcopy
│ ├── Config.qll
│ └── ...
├── MemMangementLibraries
│ ├── FFmpegMemory
│ └── ...
这是Config.qll
的开始:
import cpp
import Utils
// Change here the memory library if wrappers exists in project
import MemMangementLibraries.FFmpegMemory
import semmle.code.cpp.dataflow.TaintTracking
class MyConfig extends TaintTracking::Configuration{
MyConfig() {this = "MyConfig"}
override predicate isSource(DataFlow::Node node){
exists(
CallAllocationExpr alloc_foo |
(
node.asExpr() = alloc_foo
and not alloc_foo.getFile().toString().matches("%mem.c%")
)
)
}
...
我有四行错误:import MemMangementLibraries.FFmpegMemory
:
无法解析模块 MemMangementLibraries.FFmpegMemory
我不明白为什么。我使用库名称后面的文件夹名称进行导入:
import MemMangementLibraries.FFmpegMemory
知道是什么问题吗?
如果我将库 FFmpegMemory.qll
移到文件夹 Dangerous_Memcopy
下并将 Config.qll
中的第四行更改为 import FFmpegMemory
,它会接受它。
它似乎无法识别导入中使用的文件夹 MemMangementLibraries
。
解决方法
QL 中的导入是相对于“QL 包根目录”解析的,该目录是最近的包含 qlpack.yml
文件的封闭目录。 (它们也相对于包含 import
语句的文件进行解析,这就是为什么如果您将库移动到导入文件旁边会起作用的原因。)
在这种情况下,是不是您的 MyProj
目录不包含 qlpack.yml
?如果它本身在 QL 包中(也就是说,它的父级包含 qlpack.yml
),那么您应该能够将它作为 MyProj. MemMangementLibraries.FFmpegMemory
导入。或者,您可以在其中添加最小的 qlpack.yml
以使导入工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。