libpng是一个可对PNG图形文件实现创建、读写等操作的PNG参考库。 如果应用程序耗尽内存的话,libpng库在释放数组单元之前没有正确地初始化某些指针数组,这可能导致内存破坏。 在malloc包含有N个单元的数组时: for (i=0; ilt;N; i++) malloc element[i]; 如果应用程序在循环期间耗尽了内存的话,就不会初始化一些单元指针,之后Libpng会跳转到一个试图释放数组中所有单元(包括未初始化的区)的cleanup进程。 libpng库存在5种出现bug的情况。一种在png_read_png()函数中,仅有明确调用png_read_png()的应用才受影响;另一种情况为pCAL块处理器,任何没有禁止通过调用set_keep_unknown_chunks()来处理pCAL块的应用都受影响;其他三种情况为创建16位gamma表的代码,即使使用png_set_strip_16()将16位输入降为8位所有的应用块也都受这三种情况的影响,这是由libpng执行转换的次序决定的。
libpng是一个可对PNG图形文件实现创建、读写等操作的PNG参考库。 如果应用程序耗尽内存的话,libpng库在释放数组单元之前没有正确地初始化某些指针数组,这可能导致内存破坏。 在malloc包含有N个单元的数组时: for (i=0; ilt;N; i++) malloc element[i]; 如果应用程序在循环期间耗尽了内存的话,就不会初始化一些单元指针,之后Libpng会跳转到一个试图释放数组中所有单元(包括未初始化的区)的cleanup进程。 libpng库存在5种出现bug的情况。一种在png_read_png()函数中,仅有明确调用png_read_png()的应用才受影响;另一种情况为pCAL块处理器,任何没有禁止通过调用set_keep_unknown_chunks()来处理pCAL块的应用都受影响;其他三种情况为创建16位gamma表的代码,即使使用png_set_strip_16()将16位输入降为8位所有的应用块也都受这三种情况的影响,这是由libpng执行转换的次序决定的。