github / github/codeql

Java: `PrimitiveType.getADefaultValue()` is misleading and might not work correctly

Đang mở
#6,615 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
acknowledged Java question
Ngôn ngữ chính
CodeQL
Star
10.1k
Fork
2.1k
Merge trung bình
2 ngày 15 giờ
Pull request đã merge (30 ngày)
141

Mô tả

There are several issues with `PrimitiveType.getADefaultValue()`:
- The [documentation says](https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Type.qll/predicate.Type$PrimitiveType$getADefaultValue.0.html):
> Gets a default value for this primitive type, as assigned by the compiler for variables that are declared but not initialized explicitly.

This is misleading; unless the source actually contains literals with the default value, the predicate will have no result (except for some `BooleanLiteral`s which are found in the JDK code as part of annotations). For example for this Java code:
```java
class DefaultLiteral {
byte b;
short s;
int i;
long l;
float f;
double d;
boolean bool;
char c;

Object o;
}
```
the following query only finds `BooleanLiteral`s:
```ql
import java

from PrimitiveType t, Literal defaultValue
where
defaultValue = t.getADefaultValue()
select t, defaultValue, defaultValue.getLocation()
```
- The way it matches literals by using `getLiteral()` misses some cases where `getValue()` would actually represent the default value (relates to #6612).

Would it make sense to deprecate the predicate (for removal) and instead adjust the only query using it (`DeadStoreOfLocal.ql`)?
It appears that query actually wants to find out if an assigned literal has a default value; so maybe it should be rewritten to explicitly test that. (Note that adding a predicate `Literal.hasDefaultValue()` might not make much sense because technically for `StringLiteral`s type `String` the default value is `null`; and `NullLiteral` has no type which could occur as field type.)

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.