CodeQL 2.27.1 更新:C/C++ 新增歧义赋值查询,Kotlin 2.4.20 进入支持列表

CodeQL 2.27.1 新增 cpp/ambiguous-assignment-of-comparison 与 cs/linq/missed-firstordefault,支持 Kotlin 2.4.20,并修正 Fastify 路由识别、actions/unpinned-tag 误报与 Rust 抽取器升级带来的迁移事项。

用 Apifox,节省研发团队的每一分钟

CodeQL 2.27.1 更新:C/C++ 新增歧义赋值查询,Kotlin 2.4.20 进入支持列表

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

摘要:GitHub 在 9 月 25 日发布 CodeQL 2.27.1,新增 C/C++ 与 C# 各一条查询、加入对 Kotlin 2.4.20 的支持,并集中修正了一批误报。对大多数团队来说,这次升级不需要动手;但维护自定义查询、或对 Actions 供应链告警敏感的人,值得看一遍变更清单。

CodeQL 2.27.1 的新增查询、语言支持与降噪修复

CodeQL 是 GitHub 代码扫描背后的静态分析引擎,它的更新有一个特点:扫描结果会直接变化。同一份代码,升级前后可能多出几条告警、也可能少掉几条。理解这次改了什么,比记住版本号更有用——尤其是当你的团队已经把告警数量当成质量指标时。

AI Coding 交流群

如果你也在用 AI 写代码,或者正在研究 Cursor、Claude Code 这些工具,欢迎加入以下交流群。群里平时会聊一些 AI 编程的实际用法、开发工作流,还有各种新工具和新玩法。

新增的两条查询,各自针对哪类可疑写法

C/C++ 侧新增 cpp/ambiguous-assignment-of-comparison,用来发现把比较结果赋值给变量、又拿这次赋值本身当真假值使用的表达式。这类写法在人工评审时很容易被眼睛补全成“想写的是比较”,静态分析把它挑出来,价值在于提醒作者确认语义。

C# 侧新增 cs/linq/missed-firstordefault,指出那些用 LINQ 的 FirstOrDefault 表达会更清楚的 foreach 循环。这不是安全问题,属于可读性与一致性建议,出现在代码扫描结果里时按建议处理即可。

语言与框架支持:Kotlin 2.4.20,以及三处影响误报的修复

Java/Kotlin 侧最直接的变化是新增对 Kotlin 2.4.20 的支持;同时修复了 K2 编译器下 Foo::class.java 参数的提取问题,这处修复会直接减少 java/android/implicit-pendingintents 这类查询的误报。用 Kotlin 2.4.20 的项目此前如果遇到解析异常或结果异常,这次升级值得优先安排。

JavaScript/TypeScript 侧的变化更细致:CodeQL 现在能识别用链式方法配置的 Fastify 服务器,例如 fastify().withTypeProvider() 和 fastify().setValidatorCompiler(...)。这改善的是路由归属判断,效果是双向的——js/missing-rate-limiting 可能因此多出真实结果,而当路由被全局注册的插件保护时,不再误报。

Rust 侧修复了 m::{self} 路径在 m 是 trait 时的解析问题,并为 core::fmt::Write 增加了数据流模型,提升的是“污点数据被写入格式化输出缓冲区”这类漏洞的检出能力。Rust 抽取器则升级到 rust-analyzer 0.0.347。

Go 侧的变化集中在标准库的数据流模型上:新增或改进了对 Go 1.27 标准库 API 的建模,包括 bytes.CutLast、database/sql.ConvertAssign、database/sql/driver.RowsColumnScanner.ScanColumn、net/url.URL.Clone、net/url.Values.Clone、strings.CutLast,以及新的 encoding/json/jsontext 包;strings 包的覆盖范围也扩到了 Clone、Cut、CutPrefix、CutSuffix、Fields、FieldsFunc、Join、Builder、Reader、Replacer 等一批 API。简单说,数据流能不能被追踪到,取决于模型认不认识你调用的那个函数——模型补得越全,漏报越少。

C# 侧还有两处修复值得单独列出来。一是 cs/linq/missed-* 系列查询不再建议那些捕获了 in、out、ref 参数的 lambda 改写——这类建议本来就编译不过,属于无效建议。二是 cs/web/missing-token-validation 现在能识别通过 AddControllersWithViews 等方法把 ASP.NET Core 的 AutoValidateAntiforgeryTokenAttribute 注册成全局 MVC 过滤器的情况,从而减少对已受保护接口的误报。

供应链侧的一处降噪,和一处容易被忽略的 C# 行为变化

actions/unpinned-tag 这次不再报告两类引用。第一类是被结构合法的 .github/workflows/actions.lock 条目钉住的 action;第二类是 $/ 形式的本仓库自引用,例如 uses: $/path/to/action。两者在运行提交上都解析到同一个仓库,本身即被固定,此前属于噪音。对已经用 lock 文件治理 Actions 版本的组织,这次升级会直接减少告警噪音。

C# 侧还有一条与依赖下载相关的行为变化:在组织级私有 registry 配置里启用了 “Replaces base” 的私有 NuGet registry,现在会在 CodeQL 下载依赖时替换默认 NuGet 源——包括项目显式配置了默认源的情况。结果是扫描时的依赖解析更接近真实构建环境,代价是如果你的流水线本来就依赖公网源补齐某些包,行为会随之改变。

CodeQL 2.27.1 在 github.com 与 GHES 上的部署方式差异

部署方式:github.com 自动升,自建版本要自己判断

在 github.com 上使用代码扫描的用户不需要任何操作,GitHub 会把每个新的 CodeQL 版本自动部署过去。GitHub Enterprise Server 的情况不同:3.24 会包含这一版本的能力,更早的 GHES 需要按文档手动升级。以自建环境为主的组织,要按自己的升级节奏来安排。

三类读者,各自该做什么

第一类,只使用内置查询集的团队:什么都不用做,但要接受扫描结果的数量变化。github.com 上的升级是自动的,你能控制的只有“解释变化”这一步——升级后如果告警数出现波动,先对照这次的变更清单确认是否属于已知的误报修正或新增检出,再去判断代码本身。

第二类,维护自定义 CodeQL 查询或查询包的团队:这是本次唯一需要动手的一类。Rust 库 AST 的节点类型和访问器 API 有变化,自定义查询里如果涉及 Rust 相关的不变量或库建模,需要按 changelog 的迁移说明调整,否则可能在升级后出现查询报错或结果异常。

第三类,已经用 actions.lock 治理 Actions 版本的团队:这次 actions/unpinned-tag 的修正会直接降低告警噪音,属于“升级即可受益”的一类。如果你的团队此前因为误报太多而把这条查询降级或关闭,可以借这次升级把它重新打开试试。

限制与人应该在哪儿接管

需要留意的是 Rust 抽取器的升级。换用 rust-analyzer 0.0.347 之后,Rust 库的 AST 引入了新的节点类型和访问器 API。如果你的团队维护自定义 CodeQL 查询或查询包,需要按 2.27.1 changelog 里的迁移说明调整代码;只使用内置查询集的团队不受影响,但也要接受扫描结果数量的变化。

还有一点需要人来做判断:告警数量的变化不等于代码质量的变化。这次升级里,“减少误报”和“可能多出真实结果”是同时发生的。如果团队用告警总数做趋势指标,建议在升级后单独标注一次基线重置,而不是把数量波动直接解读为引入或修复了问题。静态分析工具的版本更新,本质上是在改变“什么算问题”的定义,而不只是改变检出率。

信息来源

HiFox :将 Agent 变成真正的队友

另外,我们也在思考,AI 如何从个人提效走进团队协作。

HiFox 是一个让人和 AI Agent 在同一个工作现场协作的平台:你可以像给同事分派任务一样指派 Agent,在任务看板中跟踪进度、查看结果,让 Agent 成为团队里的队友。

👉 立即体验 Hifox:https://hifox.com

AI Coding 交流群

如果你也在用 AI 写代码,或者正在研究 Cursor、Claude Code 这些工具,欢迎加入以下交流群。群里平时会聊一些 AI 编程的实际用法、开发工作流,还有各种新工具和新玩法。