问题标签 [semmle-ql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
268 浏览

c - 正在使用无法识别 C int 类型的静态代码分析器

我在工作中的大型嵌入式系统项目(C/C++)上使用静态代码分析器。目前,所有模块都存在以下违规行为:

应该使用指示大小和符号的类型定义来代替基本类型。

但是,我们定义了一个头文件 (footypes.h),其中包含以下内容:

然后,模块中的实际代码如下所示:

据我所知,这段代码是正确且可移植的——这只是误报,还是实现有问题?

编辑:我刚刚意识到,实际上只有在使用指针时才会给出违规行为——我已经更新了示例模块代码以反映这一点。

0 投票
1 回答
309 浏览

c - Semmle QL:TaintTracking hasFlow() 污染其参数的源的问题

我想使用通过用户输入污染其参数的函数进行 TaintTracking。例子:

Semmle 应该能够通过如下所示的查询来发现这一点(仅以 fgets->strlen 为例)。我从 SecurityOptions 借用代码:

然而,它看起来不像在工作。

当我只是查询cfg.isSource()cfg.isSink(),源和接收器都被识别。但hasFlow()仍然没有返回任何内容 - 尽管路径绝对应该存在。

  • 我正在使用 libssh2 来测试我的发现,示例流程存在于此处

  • 我要测试的查询在这里

有谁知道我在上面的查询中可能做错了什么?

0 投票
1 回答
42 浏览

algebraic-data-types - 在 Semmle QL 中为带参数的代数数据类型编写 toString()

在阅读了 QL 中对代数数据类型的支持之后,我尝试在lgtm 控制台List中定义一个类型:

这似乎有效。但后来我尝试定义辅助类以获得toString()谓词:

在这里我很难过。我不知道如何从内部x引用构造函数参数。我试过and ,但它似乎不起作用。xsConsthis.xthis.xs

如何在成员谓词中引用构造函数参数?

0 投票
1 回答
186 浏览

github - GitHub 的 / Semmle 的 CodeQL 查询执行器可以自托管吗

我想让我的服务的用户能够编写和执行CodeQL查询。我不想将他们的执行卸载到 GitHub 的 / Semmle 的服务器上。目前还不清楚这是否可行,或者我是否会遇到许可问题。

安全实验室中,它说“CodeQL 可免费用于研究和开源”。我确实希望用户编写的查询是开源的。但是,我不希望它们的执行由外部服务完成。

任何想法将不胜感激。谢谢!

0 投票
1 回答
530 浏览

semmle-ql - 如何在部分 c 源代码上使用 CodeQL?

我有一个项目的部分 c 源代码,因此我无法构建。有谁知道是否可以在该项目上运行 codeql?

通常,要创建数据库,codeql cli 需要指定构建项目的命令,我无法绕过它,即使我会说能够构建项目看起来并不重要。

不过我可能是错的,欢迎任何见解。

0 投票
1 回答
142 浏览

javascript - codeql CLI lgtm.yml:如何自定义 javascript 提取?

在使用 LGTM.com 构建数据库时,我可以使用 lgtm.yml 文件自定义 javascript 提取器,但是如何将这些自定义提供给 codeql CLI?

具体来说,我想包含一个提取器默认排除的目录(node_modules)。

这是我的 lgtm.yml 文件:

0 投票
1 回答
112 浏览

python - 实现 CI 测试以检查函数参数是否有效的方法?

假设我有一个 python 函数和字典,如下所示:

当我将代码推送到 GitHub 时(可能是某种持续集成),有没有办法检查所有调用是否foo仅使用 的一个键d作为input参数,如果有调用带有无效参数,则标记它还是发出警报?

例如:

我知道如何ValueError在运行时引发异常,但我正在寻找一个 CI 解决方案以包含在我们的 GitHub 工作流程中。现在我们正在使用 Travis-CI 进行自定义测试和 LGTM 提供的标准 CodeQL 测试。我研究过通过 LGTM 使用自定义 CodeQL,但我不太明白。我会很好地在这些持续集成中实现它或实现第三个。

0 投票
1 回答
84 浏览

c++ - 如何创建对 CodeQL 的导入

我想为我的 CodeQL 查询创建一个导入。
我希望这个导入将被命名Utils,并且我将在其中创建一个名为isNumber.

我怎样才能创建这样的导入?

我希望我的代码看起来像这样:

我不知道如何创建Utils导入,它写道:

无法解析模块 Utils

我试图Utils在我的代码查询 ( code.ql) 附近创建一个名为的文件夹,但它不起作用。

0 投票
1 回答
348 浏览

c++ - 无法从不同的文件夹添加 CodeQL 库:“无法解析模块"

我有以下文件夹结构:

这是开头Config.qll

我在四行有一个错误import MemMangementLibraries.FFmpegMemory::

无法解析模块 MemMangementLibraries.FFmpegMemory

我不明白为什么。我使用库名称后的文件夹名称进行了导入:

知道可能是什么问题吗?
如果我将库移动FFmpegMemory.qll到文件夹下Dangerous_Memcopy并将第四行更改Config.qllimport FFmpegMemory,它将接受它。

它似乎无法识别MemMangementLibraries导入中使用的文件夹。

0 投票
0 回答
28 浏览

github - 如何阻止 LGTM 包装 qmake

自动代码审查服务LGTM使用“围绕流行的构建工具(如 pkg-config、CMake 和 qmake)的包装脚本”来检测构建过程中丢失的文件并自动安装相应的包。

我的项目使用CMake,但要从 Qt 获得一些路径,我需要qmake在一个地方:

这些行在我测试过的任何地方都可以正常工作,除了在 LGTM 环境中。在 LGTM 环境中,所需的信息不会放入QT_QM_PATH,而是打印出来(在构建日志中可见)。

我强烈怀疑包装器会导致这种情况,因为其他命令按预期工作。

问题:我怎样才能阻止 LGTM 包装qmake或如何欺骗cmake捕获包装的输出qmake