Known bugs and suggested enhancements in libpng-1.0.6 1. April 24, 2000 -- BUG -- binary incompatibility Libpng-1.0.6 is binary incompatible with old applications that allocate the png_struct and png_info structures themselves instead of using png_create_*(). They do not allocate enough space for the structures because they have an incorrect notion of sizeof(png_struct) and sizeof(png_info). Although such applications should be considered broken rather than considering libpng to be broken, they are numerous and include products of the PNG group, such as gif2png and pnmtopng-2.36 (pnmtopng-2.37 is OK), so libpng will be fixed in version 1.0.7 to work around this problem. Applications that use png_create_*() instead of png_ptr=malloc(...) are immune to this problem. STATUS: Fixed in libpng-1.0.6ad, libpng-1.0.6j, and patch-d which are currently being tested by the PNG group. The fix necessarily reintroduces a binary incompatibility with any application that makes direct access to the png_info and png_struct members that deal with the pCAL chunk, palette_lookup, dither_index, time_buffer, or weighted filtering, i.e., any members coming after the new "free_me" member of either structure. It is believed that applications affected by this reintroduced binary incompatibility are rare (none are known to the PNG group). An effective workaround for this and the next bug is to recompile the old applications with the installed version of libpng. 2. April 23, 2000 -- BUG -- binary incompatibility Libpng-1.0.6 introduced binary incompatibility for applications that make direct access to members of the png_struct and png_info structures, due to the insertion of the free_me member ahead of some previously existing members. Applications that use png_set_*(), png_get_*() are immune to this problem, but people are still to this day writing applications that make ill-advised direct access to members of the png_struct and png_info structures, so libpng-1.0.6 will be patched to work around this problem. STATUS: Fixed in libpng-1.0.6j and patch-d, which are currently being tested by the PNG group. Users can work around the problem without patching libpng by recompiling their applications. 3. April 15, 2000 -- BUG -- pnggccrd.c If PNG_NO_GLOBAL_ARRAYS is defined, pnggccrd.c will not compile. STATUS: Fixed in libpng-1.0.6g 4. April 1, 2000 -- BUG Under some circumstances old applications that make direct access to the info_ptr->text and its members might free the same memory that is also free'ed by libpng during the png_destroy_struct process. Fixed in libpng-1.0.6-patch-c and libpng-1.0.6d. The PNG_FREE_TEXT flag bit in info_ptr->free_me is now checked to make sure libpng is responsible for freeing the memory. 5. April 1, 2000 -- BUG The non-ISO-C "strdup()" function is used in png.c STATUS: The function has been simplified and no longer uses strdup() in libpng-1.0.6-patch-c and libpng-1.0.6d. 6. March 24, 2000 -- BUG The png_set_rgb_to_gray_fixed() function is setting incorrect weighting factors. STATUS: Fixed in libpng-1.0.6-patch-b and libpng-1.0.6d. 7. March 22, 2000 -- BUG There are some printf() and fprintf() statements active in pngwutil.c when PNG_NO_STDIO and PNG_sCAL_SUPPORTED are both defined. STATUS: Fixed in libpng-1.0.6-patch-a and libpng-1.0.6d. The strcpy() function is used instead. 8. March 22, 2000 -- BUG The length of the iCCP chunk data is calculated incorrectly; because it can contain zeroes, strlen() doesn't work. STATUS: Fixed in libpng-1.0.6-patch-a and libpng-1.0.6d by adding a data_length parameter to the png_decompress_chunk() function. 9. March 15, 1998 -- OPTIMIZATION -- Kevin Bracey Loops need to be optimized everywhere Make them count down instead of up -- Kevin Bracey Optimizing compilers don't need this, and making the change would be error prone -- Tom Lane, Glenn R-P Question whether i-- or --i is better. STATUS: Under investigation, postponed until after libpng-1.1.0. About 160 loops will be turned around in libpng-1.1.Nn, for testing. 10. July 4, 1998 -- ENHANCEMENT -- Glenn R-P libpng-1.0.5 and earlier transform colors to gamma=1.0 space for merging with background, and then back to the image's gamma. The bit_depth of the intermediate (gamma=1.0) representation is probably not sufficient. In the typical gamma=1/2.2 situation, the linear pixels need about 4 more bits than the gamma-encoded ones, to avoid loss of precision. A similar situation exists with the rgb_to_gray operation. STATUS: under development. 11. September 1999 -- ENHANCEMENT -- It should be possible to use libpng without floating-point aritmetic. STATUS: Under investigation, implementation postponed until after libpng-1.0.6. The application interface will change because replacements for the png_set_gAMA(), png_set_cHRM(), and corresponding png_get_() functions will be needed. Much of this was completed in libpng-1.0.6, but gamma compensation is not yet done in fixed-point arithmetic.