CodeQL 文档

复合赋值中的隐式缩小转换

ID: java/implicit-cast-in-compound-assignment
Kind: problem
Security severity: 8.1
Severity: warning
Precision: very-high
Tags:
   - reliability
   - security
   - external/cwe/cwe-190
   - external/cwe/cwe-192
   - external/cwe/cwe-197
   - external/cwe/cwe-681
Query suites:
   - java-code-scanning.qls
   - java-security-extended.qls
   - java-security-and-quality.qls

单击以在 CodeQL 存储库中查看查询

形式为 x += yx *= y 的复合赋值语句,如果 x 的类型比 y 的类型窄,则会执行隐式缩小转换。例如,x += y 等效于 x = (T)(x + y),其中 Tx 的类型。这可能导致信息丢失和数值错误(例如溢出)。

建议

确保复合赋值语句左侧的类型至少与右侧的类型一样宽。

示例

如果 x 的类型为 shorty 的类型为 int,则表达式 x + y 的类型为 int。但是,表达式 x += y 等效于 x = (short) (x + y)。表达式 x + y 被强制转换为赋值左侧的类型:short,可能导致信息丢失。

为避免隐式缩小 x + y 的类型,请将 x 的类型更改为 int。然后,xx + y 的类型均为 int,无需隐式转换。

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私