昨天遇到一个amfext会core的问题,一开始以为是自己的php代码写的有问题,后来仔细看了一下core的地点,结果发现
似乎是amfext的一个bug,它在MAKE_STD_ZVAL之后没有对zval的type进行初始化,而接下来的操作中立即使用了这个
type,如果type=5则调用HASH_OF,一般情况下这句是不会有错的,因为它实际上是从某个数组中取数据出来,并且
这个结果也不会修改(不知道这里为什么要这么写,估计是半成品,为某个目的预留的),因此即使错了也问题不大。
但是在特殊情况下,比如昨天core的情况下,数组的index实在太大了,应该有10亿左右,这个时候可能访问到了某个
保护内在地址,因此才会直接segement fault了。并且在我的机器上运行那段代码是不会core的,只有在同事的机器上会,
并且只要对代码进行任意修改,比如加日志都不会core了,可能就是因为修改了内存加载的地址,导致加载了那个很大的index。