PHP扩展使用libpng出core

coredump是由php-cgi产生的,不好调式。一是无法对php-cgi充分请求,以复现core,二是我在lirui04的机器上,gdb run给php-cgi传参数时,提示--fpm这个参数有问题。


根据coredump的调用栈信息,core最终出在fwrite标准库函数,根据理论和经验,可能导致fwrite出core的,依次是其第4个参数和第1个参数。


根据qrencode.c中对libpng的使用,结合libpng-1.2.8的源码,得出以下临时的solution,理论上可以解决这个具体的问题:


/******************************
 * customized for libpng-1.2.8
 * to avoid fwrite's segmentation fault
 * @reference:
 *   pngwutil.c:133
 *   PngFile.c:419
 *   pngwio.c:52
 *   png.h:1073 1054 1130
 * XXX: this macro's augument was refered more than once
 ******************************/
#define CUSTOMIZED_CHECK_PNG_PTR(png_ptr) \
do { \
if (!(png_ptr) \
|| (int)((png_ptr)->sig_bytes) > 7 \
|| (int)((png_ptr)->sig_bytes) < 0 \
|| !(png_ptr)->io_ptr) { \
/* return from PHP method or throw an exception, and release related resources if any */ \
} \
} while (0)


在qrencode.c的546行之前,定义上面的宏,并在545行之后、546行之前,调用此宏,CUSTOMIZED_CHECK_PNG_PTR(png_ptr);。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值