libpng 1.6.41 - January 24, 2024
================================

This is a public release of libpng, intended for use in production code.


Files available for download
----------------------------

Source files with LF line endings (for Unix/Linux):

 * libpng-1.6.41.tar.xz (LZMA-compressed, recommended)
 * libpng-1.6.41.tar.gz (deflate-compressed)

Source files with CRLF line endings (for Windows):

 * lpng1641.7z (LZMA-compressed, recommended)
 * lpng1641.zip (deflate-compressed)

Other information:

 * README.md
 * LICENSE.md
 * AUTHORS.md
 * TRADEMARK.md


Changes from version 1.6.40 to version 1.6.41
---------------------------------------------

 * Added SIMD-optimized code for the Loongarch LSX hardware.
   (Contributed by GuXiWei, JinBo and ZhangLixia)
 * Fixed the run-time discovery of MIPS MSA hardware.
   (Contributed by Sui Jingfeng)
 * Fixed an off-by-one error in the function `png_do_check_palette_indexes`,
   which failed to recognize errors that might have existed in the first
   column of a broken palette-encoded image. This was a benign regression
   accidentally introduced in libpng-1.6.33. No pixel was harmed.
   (Contributed by Adam Richter; reviewed by John Bowler)
 * Fixed, improved and modernized the contrib/pngminus programs, i.e.,
   png2pnm.c and pnm2png.c
 * Removed old and peculiar portability hacks that were meant to silence
   warnings issued by gcc version 7.1 alone.
   (Contributed by John Bowler)
 * Fixed and modernized the CMake file, and raised the minimum required
   CMake version from 3.1 to 3.6.
   (Contributed by Clinton Ingram, Timothy Lyanguzov, Tyler Kropp, et al.)
 * Allowed the configure script to disable the building of auxiliary tools
   and tests, thus catching up with the CMake file.
   (Contributed by Carlo Bramini)
 * Fixed a build issue on Mac.
   (Contributed by Zixu Wang)
 * Moved the Autoconf macro files to scripts/autoconf.
 * Moved the CMake files (except for the main CMakeLists.txt) to
   scripts/cmake and moved the list of their contributing authors to
   scripts/cmake/AUTHORS.md
 * Updated the CI configurations and scripts.
 * Relicensed the CI scripts to the MIT License.
 * Improved the test coverage.
   (Contributed by John Bowler)


Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
Subscription is required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe.
