github / github/codeql

Java: `TryStmt` resource variable declaration is `LocalVariableDeclStmt` instead of `LocalVariableDeclExpr`

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

Descripción

### Description
The CodeQL class `TryStmt` models variable declarations in try-with-resources as `LocalVariableDeclStmt`.
This appears to be inconsistent with how the JLS defines them:
- [JLS 16 §14.20.3](https://docs.oracle.com/javase/specs/jls/se16/html/jls-14.html#jls-14.20.3):
```
Resource:
LocalVariableDeclaration
VariableAccess
```
- [JLS 16 §14.4](https://docs.oracle.com/javase/specs/jls/se16/html/jls-14.html#jls-LocalVariableDeclaration)
> A local variable declaration can appear in the following locations:
>- a local variable declaration statement in a block (§14.4.2)
>- the header of a basic for statement (§14.14.1)
>- the header of an enhanced for statement (§14.14.2)
>- the resource specification of a try-with-resources statement (§14.20.3)
>- a pattern (§14.30.1)

CodeQL models "local variable declaration statement in a block" (§14.4.2) as `LocalVariableDeclStmt`, other cases such as `for` statement variables are modeled as `LocalVariableDeclExpr`.
The only exception is the resource of a try-with-resources statement which is currently modeled as `LocalVariableDeclStmt`; this seems incorrect and should probably be a `LocalVariableDeclExpr` instead.

### Example
(See also `TryStmt::getAResourceDecl` result type)
```ql
import java

from LocalVariableDeclStmt varDeclStmt
where any(TryStmt s).getAResourceDecl() = varDeclStmt
select varDeclStmt
```
[Query Console link](https://lgtm.com/query/2939006923879317681/)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.