突然有一天,老大突然在群里说,把fastjson 包升级到1.2.60,我一脸蒙蔽,听说有重大安全漏洞,就赶紧升级完提交测试了。
今天刚好有空,赶紧上全球最大的程序员同性交友网站扒拉扒拉看看具体bug,做到心里有点B数。
话不多说,上同性交友网站截图:
撸个代码试一下,实践是检验真理的唯一标准,也是找出bug的快速方法:
public class FastJsonTest {
public static void main(String[] args) {
String str = "{\"g\":\"\\x";
Object obj = JSON.parse(str);
System.out.println(str);
}
}
写完,运行,然后报错,一气呵成。
看更新记录,这个解决方案直接加一层判断,贼6,就去老版本这里打个断点吧:
开启找你妹(debug)模式 :
看,他来了
‘\u001A’ 表示已经读完了也就是EOF,然后看 x1 已经是结束,x2 再次为此,继续debug,
发现执行了putChar方法,执行完sp的值+1
然后继续执行,又返回scanString方法,又开始了一遍
可怕的事情来了。。。竟然进入了死循环,sp增加到sbuf.length(512)的时候,会进入if分支,开始扩容。
然后OOM。
咦,真吓人,赶紧升级1.2.60吧。