github / github/codeql

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

Abierto
#20,257 1 comentario 0 reacciones 0 asignados Ver en GitHub
bug question
Lenguaje dominante
CodeQL
Estrellas
10.1k
Forks
2.1k
Merge medio
2 d 15 h
PR fusionados (30 d)
141

Descripción

# 🖼️ 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.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza reproduciendo el análisis de CodeQL contra app/controllers/concerns/avo_auditable.rb y app/controllers/concerns/maintenance_tasks_auditable.rb; después, compara el resultado con ruby -c y la reproducción proporcionada. Se considera completado cuando el analizador de Ruby de CodeQL acepta el reenvío de un bloque anónimo en su propia línea dentro de una llamada multilínea y el análisis continúa sin un error de parseo.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
ruby
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.