弱点描述
该类型弱点通过Coverity扫描报出的错误信息如下:
Unintended regular expression (REGEX_CONFUSION)
The string manipulation will return incorrect results for some inputs.
上面的提示信息翻译的意思是: 意外的正则表达式(正则表达式混淆)
附带某些输入的字符串操作返回了不正确的结果。
简单的说: 就是正则表达式的使用方式错误。
示例代码
看一个上面错误的示例代码:
public void regexConfusion() {
String s = "D:/temp/../dd";
s = s.replaceAll("..", "-");
System.out.println(s); //------d
}
上面代码使用正则表达式替换, 本来的意思是将字符中的两个点号(..
)替换为横线 (-
)。
也就是说将 D:/temp/../dd
替换为 D:/temp/-/dd
。
但是, .
是正则表达式的通配符,可代表任意的一个字符, 两个 .
就是任意的两个字符,所以, 上面代码的实际效果就是将字符串中的任意两个字符替换为 -
, 因为上面的字符数量是奇数,除了最后一个字符之外, 其余的没两个字符都被替换为