github / github/codeql

CodeQL Ruby parser fails on bare & block forwarding in multi-line method calls

未關閉
#20,257 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
bug question
主要語言
CodeQL
星號
10.1k
分支
2.1k
平均合併
2 天 15 小時
30 天內合併 PR
141

描述

# 🖼️ Context

CodeQL's Ruby parser encounters parse errors when using Ruby 3.1+'s anonymous block forwarding syntax (&) in specific contexts, despite this being valid Ruby syntax.

## Reproduction Case

```ruby
module TestCase
def method_with_bare_ampersand(&)
some_method_call(
keyword_arg1: "value1",
keyword_arg2: "value2",
keyword_arg3: "value3",
& # <-- CodeQL parse error occurs here
)
end

# This works fine - single line call
def working_method(&)
simple_call(&)
end

private

def some_method_call(keyword_arg1:, keyword_arg2:, keyword_arg3:, &block)
yield if block_given?
end

def simple_call(&block)
yield if block_given?
end
end
```

### Environment
- Repo: [rubygems/rubygems.org](https://github.com/rubygems/rubygems.org)
- recent [workflow run](https://github.com/rubygems/rubygems.org/actions/runs/17104368086/job/48509269173?pr=5925))
- [offending file](https://github.com/rubygems/rubygems.org/blob/ae3f654e67d74122a692de4e7832fa6657d98a7a/app/controllers/concerns/avo_auditable.rb#L26)
- [offending file](https://github.com/rubygems/rubygems.org/blob/ae3f654e67d74122a692de4e7832fa6657d98a7a/app/controllers/concerns/maintenance_tasks_auditable.rb#L26)
- CodeQL CLI version: 2.15.5
- Ruby version: 3.4.x
- Syntax: Valid Ruby (confirmed with ruby -c)

### 📝 Notes

- The issue only occurs with multi-line method calls where & appears on its own line
- Single-line calls with & work correctly
- Named block parameters (e.g., &block) work in all contexts
- This is valid Ruby 3.1+ anonymous block forwarding syntax

### Impact

This prevents CodeQL security analysis on codebases using modern Ruby block forwarding patterns, forcing developers to use less idiomatic code or exclude files from analysis.

貢獻指南

開啟貢獻指南

研究方向

Start by reproducing CodeQL analysis against app/controllers/concerns/avo_auditable.rb and app/controllers/concerns/maintenance_tasks_auditable.rb, then compare the result with ruby -c and the supplied reproduction. Done means the CodeQL Ruby parser accepts anonymous block forwarding on its own line in a multi-line call and analysis proceeds without a parse error.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
ruby
領域
compilers
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。