从这里可以看出是在库的画像素点的地方出了错,被调试器断在了gdImageSetAAPixelColor这个函数里。
再看对应代码,访问了gdImagePtr结构体中的一个,导致访问违例。我们再从即时窗口检查一下:
这里是gdImageAALine函数,一个个点地画线,干的是苦力活。从gdImageLine里调用了它:
这里的条件判断是是否了防锯齿功能。如果我们调用imageantialias函数打开这个功能,那么就会走这里来。
图里就是我们从php调用的imageline函数的实现啦,非常简单。可以看出图片是真彩色的时候它会默认防锯齿功能。
这里问题就在于,我们创建(imagecreate)的图片不是真彩色的图,而后我们手动了防锯齿(imageantialias),调用进去想当然地把它当作一张真彩色图,从而导致了错误。
跟进去,可以看到imagecreate函数调用的gdImageCreate里直接把真彩色相关的设为了null。
导致这个问题的原因还是代码修改考虑不周全,引入了新的漏洞;没有对所有可能条件进行测试,所以从php 7.2.0一直到php 7.2.4都还存在问题。
网友评论 ()条 查看