github / github/codeql

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

Aperta
#5,783 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
Java question
Lingua principale
CodeQL
Stelle
10.1k
Fork
2.1k
Merge medio
2g 15h
PR unite (30g)
141

Descrizione

### 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/)

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.