缺少格式参数¶
ID: java/missing-format-argument
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- correctness
- external/cwe/cwe-685
Query suites:
- java-security-and-quality.qls
当使用 printf
样式格式字符串格式化字符串时,必须确保提供的参数数量与格式字符串引用的参数数量相匹配。多余的参数将被静默丢弃,这可能不是预期行为,而参数太少将导致 IllegalFormatException
。
格式字符串由 String
、Formatter
、Console
、PrintWriter
和 PrintStream
类上的 format
方法使用。其中几个类还提供了方法别名 printf
。类 Console
有两个额外的方法 readLine
和 readPassword
,它们也使用格式字符串。
建议¶
向格式化方法提供正确数量的参数,或更改格式字符串以使用正确参数。
示例¶
以下示例仅提供一个要格式化的参数,但格式字符串引用两个参数,因此这将引发 IllegalFormatException
。
System.out.format("First string: %s Second string: %s", "Hello world");
参考¶
Java API 规范:格式字符串语法,String 类,Formatter 类,Console 类,PrintWriter 类,PrintStream 类。
SLF4J 库:org.slf4j.Logger。
通用弱点枚举:CWE-685。