github / github/codeql

Java: Explicit `ArrayInit` containing annotation nested inside annotation as implicit array value is malformed

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

描述

### Version
CodeQL CLI v2.5.7

### Description of the issue
An explicit `ArrayInit` containing one or more annotations, which is itself the value of an annotation being the single value for an array _without_ explicit `ArrayInit`, is erroneously reported as having no children.

This can be seen with one of the LGTM demo projects: [Query Console Link](https://lgtm.com/query/2136226172412136860/)

### Reproduction steps
1. Create a Java database for the following Java source code:
```java
import java.util.*;
import java.lang.annotation.*;

public class AnnTest2 {
@interface Ann { }

enum MyEnum {
A,
B
}

@interface Nested1 {
Ann ann();
Ann[] anns();
int[] ints();
MyEnum[] enumConstants();
}

@interface Nested2 {
// Also happens when this element is named `value` and annotation omits
// element name, e.g. `@Nested2(@Nested1(...))`
Nested1[] nested();
}

@Nested2(
// Type of `nested` is array, `@Nested1` is used here as single value without
// explicit ArrayInit
nested = @Nested1(
ann = @Ann,
// This ArrayInit is modelled erroneously (has no children)
anns = { @Ann },
// But these ArrayInits are correct
ints = { 1, 2 },
enumConstants = { MyEnum.A, MyEnum.B }
)
)
private String f;
}
```
2. Run the following CodeQL query
```ql
import java

from ArrayInit arrayInit
where arrayInit.getCompilationUnit().fromSource()
select arrayInit, arrayInit.getSize()
```
3. Have a look at the one `ArrayInit` result with size 0
:x: `anns = { @Ann }` is erroneously reported as having size 0

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

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

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