github / github/codeql

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

オープン
#20,257 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug question
主要言語
CodeQL
スター
10.1k
フォーク
2.1k
平均マージ
2日 15時間
マージ済み PR(30日)
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 を短くまとめたダイジェスト。