summaryrefslogtreecommitdiff
path: root/png
diff options
context:
space:
mode:
Diffstat (limited to 'png')
-rw-r--r--png/ANNOUNCE59
-rw-r--r--png/CHANGES22
-rw-r--r--png/README2
-rw-r--r--png/libpng-manual.txt2
-rw-r--r--png/libpng.36
-rw-r--r--png/libpngpf.34
-rw-r--r--png/png.52
-rw-r--r--png/png.c101
-rw-r--r--png/png.h26
-rw-r--r--png/pngconf.h8
-rw-r--r--png/pngerror.c9
-rw-r--r--png/pnglibconf.h11
-rw-r--r--png/pngprefix.h11
-rw-r--r--png/pngpriv.h41
14 files changed, 144 insertions, 160 deletions
diff --git a/png/ANNOUNCE b/png/ANNOUNCE
index bc147adb7..a2a7ac363 100644
--- a/png/ANNOUNCE
+++ b/png/ANNOUNCE
@@ -1,5 +1,5 @@
-libpng 1.6.43 - February 23, 2024
-=================================
+libpng 1.6.44 - September 12, 2024
+==================================
This is a public release of libpng, intended for use in production code.
@@ -9,13 +9,13 @@ Files available for download
Source files with LF line endings (for Unix/Linux):
- * libpng-1.6.43.tar.xz (LZMA-compressed, recommended)
- * libpng-1.6.43.tar.gz (deflate-compressed)
+ * libpng-1.6.44.tar.xz (LZMA-compressed, recommended)
+ * libpng-1.6.44.tar.gz (deflate-compressed)
Source files with CRLF line endings (for Windows):
- * lpng1643.7z (LZMA-compressed, recommended)
- * lpng1643.zip (deflate-compressed)
+ * lpng1644.7z (LZMA-compressed, recommended)
+ * lpng1644.zip (deflate-compressed)
Other information:
@@ -25,36 +25,29 @@ Other information:
* TRADEMARK.md
-Changes from version 1.6.42 to version 1.6.43
+Changes from version 1.6.43 to version 1.6.44
---------------------------------------------
- * Fixed the row width check in png_check_IHDR().
- This corrected a bug that was specific to the 16-bit platforms,
- and removed a spurious compiler warning from the 64-bit builds.
- (Reported by Jacek Caban; fixed by John Bowler)
- * Added eXIf chunk support to the push-mode reader in pngpread.c.
- (Contributed by Chris Blume)
- * Added contrib/pngexif for the benefit of the users who would like
- to inspect the content of eXIf chunks.
- * Added contrib/conftest/basic.dfa, a basic build-time configuration.
+ * Hardened calculations in chroma handling to prevent overflows, and
+ relaxed a constraint in cHRM validation to accomodate the standard
+ ACES AP1 set of color primaries.
(Contributed by John Bowler)
- * Fixed a preprocessor condition in pngread.c that broke build-time
- configurations like contrib/conftest/pngcp.dfa.
- (Contributed by John Bowler)
- * Added CMake build support for LoongArch LSX.
- (Contributed by GuXiWei)
- * Fixed a CMake build error that occurred under a peculiar state of the
- dependency tree. This was a regression introduced in libpng-1.6.41.
- (Contributed by Dan Rosser)
- * Marked the installed libpng headers as system headers in CMake.
- (Contributed by Benjamin Buch)
- * Updated the build support for RISCOS.
- (Contributed by Cameron Cawley)
- * Updated the makefiles to allow cross-platform builds to initialize
- conventional make variables like AR and ARFLAGS.
- * Added various improvements to the CI scripts in areas like version
- consistency verification and text linting.
- * Added version consistency verification to pngtest.c also.
+ * Removed the ASM implementation of ARM Neon optimizations and updated
+ the build accordingly. Only the remaining C implementation shall be
+ used from now on, thus ensuring the support of the PAC/BTI security
+ features on ARM64.
+ (Contributed by Ross Burton and John Bowler)
+ * Fixed the pickup of the PNG_HARDWARE_OPTIMIZATIONS option in the
+ CMake build on FreeBSD/amd64. This is an important performance fix
+ on this platform.
+ * Applied various fixes and improvements to the CMake build.
+ (Contributed by Eric Riff, Benjamin Buch and Erik Scholz)
+ * Added fuzzing targets for the simplified read API.
+ (Contributed by Mikhail Khachayants)
+ * Fixed a build error involving pngtest.c under a custom config.
+ This was a regression introduced in a code cleanup in libpng-1.6.43.
+ (Contributed by Ben Wagner)
+ * Fixed and improved the config files for AppVeyor CI and Travis CI.
Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
diff --git a/png/CHANGES b/png/CHANGES
index 441b57ecf..724ccca2d 100644
--- a/png/CHANGES
+++ b/png/CHANGES
@@ -6196,6 +6196,28 @@ Version 1.6.43 [February 23, 2024]
consistency verification and text linting.
Added version consistency verification to pngtest.c also.
+Version 1.6.44 [September 12, 2024]
+ Hardened calculations in chroma handling to prevent overflows, and
+ relaxed a constraint in cHRM validation to accomodate the standard
+ ACES AP1 set of color primaries.
+ (Contributed by John Bowler)
+ Removed the ASM implementation of ARM Neon optimizations and updated
+ the build accordingly. Only the remaining C implementation shall be
+ used from now on, thus ensuring the support of the PAC/BTI security
+ features on ARM64.
+ (Contributed by Ross Burton and John Bowler)
+ Fixed the pickup of the PNG_HARDWARE_OPTIMIZATIONS option in the
+ CMake build on FreeBSD/amd64. This is an important performance fix
+ on this platform.
+ Applied various fixes and improvements to the CMake build.
+ (Contributed by Eric Riff, Benjamin Buch and Erik Scholz)
+ Added fuzzing targets for the simplified read API.
+ (Contributed by Mikhail Khachayants)
+ Fixed a build error involving pngtest.c under a custom config.
+ This was a regression introduced in a code cleanup in libpng-1.6.43.
+ (Contributed by Ben Wagner)
+ Fixed and improved the config files for AppVeyor CI and Travis CI.
+
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
diff --git a/png/README b/png/README
index a6ca3ae9f..3af606889 100644
--- a/png/README
+++ b/png/README
@@ -1,4 +1,4 @@
-README for libpng version 1.6.43
+README for libpng version 1.6.44
================================
See the note about version numbers near the top of `png.h`.
diff --git a/png/libpng-manual.txt b/png/libpng-manual.txt
index 798805759..2ce366d67 100644
--- a/png/libpng-manual.txt
+++ b/png/libpng-manual.txt
@@ -9,7 +9,7 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
- libpng version 1.6.36, December 2018, through 1.6.43 - February 2024
+ libpng version 1.6.36, December 2018, through 1.6.44 - September 2024
Updated and distributed by Cosmin Truta
Copyright (c) 2018-2024 Cosmin Truta
diff --git a/png/libpng.3 b/png/libpng.3
index 45e76e483..5a3c89cb9 100644
--- a/png/libpng.3
+++ b/png/libpng.3
@@ -1,6 +1,6 @@
-.TH LIBPNG 3 "February 23, 2024"
+.TH LIBPNG 3 "September 12, 2024"
.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.6.43
+libpng \- Portable Network Graphics (PNG) Reference Library 1.6.44
.SH SYNOPSIS
\fB#include <png.h>\fP
@@ -528,7 +528,7 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
- libpng version 1.6.36, December 2018, through 1.6.43 - February 2024
+ libpng version 1.6.36, December 2018, through 1.6.44 - September 2024
Updated and distributed by Cosmin Truta
Copyright (c) 2018-2024 Cosmin Truta
diff --git a/png/libpngpf.3 b/png/libpngpf.3
index 0abec74a2..b7557ca27 100644
--- a/png/libpngpf.3
+++ b/png/libpngpf.3
@@ -1,6 +1,6 @@
-.TH LIBPNGPF 3 "February 23, 2024"
+.TH LIBPNGPF 3 "September 12, 2024"
.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.6.43
+libpng \- Portable Network Graphics (PNG) Reference Library 1.6.44
(private functions)
.SH SYNOPSIS
diff --git a/png/png.5 b/png/png.5
index a8a681813..14a3c432b 100644
--- a/png/png.5
+++ b/png/png.5
@@ -1,4 +1,4 @@
-.TH PNG 5 "February 23, 2024"
+.TH PNG 5 "September 12, 2024"
.SH NAME
png \- Portable Network Graphics (PNG) format
diff --git a/png/png.c b/png/png.c
index 9ed315700..9a9fb23d9 100644
--- a/png/png.c
+++ b/png/png.c
@@ -14,7 +14,7 @@
#include "pngpriv.h"
/* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_6_43 Your_png_h_is_not_version_1_6_43;
+typedef png_libpng_version_1_6_44 Your_png_h_is_not_version_1_6_44;
/* Tells libpng that we have already handled the first "num_bytes" bytes
* of the PNG file signature. If the PNG data is embedded into another
@@ -794,7 +794,7 @@ png_get_copyright(png_const_structrp png_ptr)
return PNG_STRING_COPYRIGHT
#else
return PNG_STRING_NEWLINE \
- "libpng version 1.6.43" PNG_STRING_NEWLINE \
+ "libpng version 1.6.44" PNG_STRING_NEWLINE \
"Copyright (c) 2018-2024 Cosmin Truta" PNG_STRING_NEWLINE \
"Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson" \
PNG_STRING_NEWLINE \
@@ -1203,6 +1203,24 @@ png_colorspace_sync(png_const_structrp png_ptr, png_inforp info_ptr)
#endif /* GAMMA */
#ifdef PNG_COLORSPACE_SUPPORTED
+static int
+png_safe_add(png_int_32 *addend0_and_result, png_int_32 addend1,
+ png_int_32 addend2) {
+ /* Safely add three integers. Returns 0 on success, 1 on overlow.
+ * IMPLEMENTATION NOTE: ANSI requires signed overflow not to occur, therefore
+ * relying on addition of two positive values producing a negative one is not
+ * safe.
+ */
+ int addend0 = *addend0_and_result;
+ if (0x7fffffff - addend0 < addend1)
+ return 1;
+ addend0 += addend1;
+ if (0x7fffffff - addend1 < addend2)
+ return 1;
+ *addend0_and_result = addend0 + addend2;
+ return 0;
+}
+
/* Added at libpng-1.5.5 to support read and write of true CIEXYZ values for
* cHRM, as opposed to using chromaticities. These internal APIs return
* non-zero on a parameter error. The X, Y and Z values are required to be
@@ -1211,38 +1229,52 @@ png_colorspace_sync(png_const_structrp png_ptr, png_inforp info_ptr)
static int
png_xy_from_XYZ(png_xy *xy, const png_XYZ *XYZ)
{
- png_int_32 d, dwhite, whiteX, whiteY;
+ png_int_32 d, dred, dgreen, dwhite, whiteX, whiteY;
- d = XYZ->red_X + XYZ->red_Y + XYZ->red_Z;
+ /* 'd' in each of the blocks below is just X+Y+Z for each component,
+ * x, y and z are X,Y,Z/(X+Y+Z).
+ */
+ d = XYZ->red_X;
+ if (png_safe_add(&d, XYZ->red_Y, XYZ->red_Z))
+ return 1;
if (png_muldiv(&xy->redx, XYZ->red_X, PNG_FP_1, d) == 0)
return 1;
if (png_muldiv(&xy->redy, XYZ->red_Y, PNG_FP_1, d) == 0)
return 1;
- dwhite = d;
+ dred = d;
whiteX = XYZ->red_X;
whiteY = XYZ->red_Y;
- d = XYZ->green_X + XYZ->green_Y + XYZ->green_Z;
+ d = XYZ->green_X;
+ if (png_safe_add(&d, XYZ->green_Y, XYZ->green_Z))
+ return 1;
if (png_muldiv(&xy->greenx, XYZ->green_X, PNG_FP_1, d) == 0)
return 1;
if (png_muldiv(&xy->greeny, XYZ->green_Y, PNG_FP_1, d) == 0)
return 1;
- dwhite += d;
+ dgreen = d;
whiteX += XYZ->green_X;
whiteY += XYZ->green_Y;
- d = XYZ->blue_X + XYZ->blue_Y + XYZ->blue_Z;
+ d = XYZ->blue_X;
+ if (png_safe_add(&d, XYZ->blue_Y, XYZ->blue_Z))
+ return 1;
if (png_muldiv(&xy->bluex, XYZ->blue_X, PNG_FP_1, d) == 0)
return 1;
if (png_muldiv(&xy->bluey, XYZ->blue_Y, PNG_FP_1, d) == 0)
return 1;
- dwhite += d;
whiteX += XYZ->blue_X;
whiteY += XYZ->blue_Y;
- /* The reference white is simply the sum of the end-point (X,Y,Z) vectors,
- * thus:
+ /* The reference white is simply the sum of the end-point (X,Y,Z) vectors so
+ * the fillowing calculates (X+Y+Z) of the reference white (media white,
+ * encoding white) itself:
*/
+ if (png_safe_add(&d, dred, dgreen))
+ return 1;
+
+ dwhite = d;
+
if (png_muldiv(&xy->whitex, whiteX, PNG_FP_1, dwhite) == 0)
return 1;
if (png_muldiv(&xy->whitey, whiteY, PNG_FP_1, dwhite) == 0)
@@ -1257,20 +1289,6 @@ png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
png_fixed_point red_inverse, green_inverse, blue_scale;
png_fixed_point left, right, denominator;
- /* Check xy and, implicitly, z. Note that wide gamut color spaces typically
- * have end points with 0 tristimulus values (these are impossible end
- * points, but they are used to cover the possible colors). We check
- * xy->whitey against 5, not 0, to avoid a possible integer overflow.
- */
- if (xy->redx < 0 || xy->redx > PNG_FP_1) return 1;
- if (xy->redy < 0 || xy->redy > PNG_FP_1-xy->redx) return 1;
- if (xy->greenx < 0 || xy->greenx > PNG_FP_1) return 1;
- if (xy->greeny < 0 || xy->greeny > PNG_FP_1-xy->greenx) return 1;
- if (xy->bluex < 0 || xy->bluex > PNG_FP_1) return 1;
- if (xy->bluey < 0 || xy->bluey > PNG_FP_1-xy->bluex) return 1;
- if (xy->whitex < 0 || xy->whitex > PNG_FP_1) return 1;
- if (xy->whitey < 5 || xy->whitey > PNG_FP_1-xy->whitex) return 1;
-
/* The reverse calculation is more difficult because the original tristimulus
* value had 9 independent values (red,green,blue)x(X,Y,Z) however only 8
* derived values were recorded in the cHRM chunk;
@@ -1451,16 +1469,16 @@ png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
* value of 2 indicates an internal error to the caller.
*/
if (png_muldiv(&left, xy->greenx-xy->bluex, xy->redy - xy->bluey, 7) == 0)
- return 2;
+ return 1;
if (png_muldiv(&right, xy->greeny-xy->bluey, xy->redx - xy->bluex, 7) == 0)
- return 2;
+ return 1;
denominator = left - right;
/* Now find the red numerator. */
if (png_muldiv(&left, xy->greenx-xy->bluex, xy->whitey-xy->bluey, 7) == 0)
- return 2;
+ return 1;
if (png_muldiv(&right, xy->greeny-xy->bluey, xy->whitex-xy->bluex, 7) == 0)
- return 2;
+ return 1;
/* Overflow is possible here and it indicates an extreme set of PNG cHRM
* chunk values. This calculation actually returns the reciprocal of the
@@ -1473,9 +1491,9 @@ png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
/* Similarly for green_inverse: */
if (png_muldiv(&left, xy->redy-xy->bluey, xy->whitex-xy->bluex, 7) == 0)
- return 2;
+ return 1;
if (png_muldiv(&right, xy->redx-xy->bluex, xy->whitey-xy->bluey, 7) == 0)
- return 2;
+ return 1;
if (png_muldiv(&green_inverse, xy->whitey, denominator, left-right) == 0 ||
green_inverse <= xy->whitey)
return 1;
@@ -1520,25 +1538,14 @@ png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
static int
png_XYZ_normalize(png_XYZ *XYZ)
{
- png_int_32 Y;
+ png_int_32 Y, Ytemp;
- if (XYZ->red_Y < 0 || XYZ->green_Y < 0 || XYZ->blue_Y < 0 ||
- XYZ->red_X < 0 || XYZ->green_X < 0 || XYZ->blue_X < 0 ||
- XYZ->red_Z < 0 || XYZ->green_Z < 0 || XYZ->blue_Z < 0)
+ /* Normalize by scaling so the sum of the end-point Y values is PNG_FP_1. */
+ Ytemp = XYZ->red_Y;
+ if (png_safe_add(&Ytemp, XYZ->green_Y, XYZ->blue_Y))
return 1;
- /* Normalize by scaling so the sum of the end-point Y values is PNG_FP_1.
- * IMPLEMENTATION NOTE: ANSI requires signed overflow not to occur, therefore
- * relying on addition of two positive values producing a negative one is not
- * safe.
- */
- Y = XYZ->red_Y;
- if (0x7fffffff - Y < XYZ->green_X)
- return 1;
- Y += XYZ->green_Y;
- if (0x7fffffff - Y < XYZ->blue_X)
- return 1;
- Y += XYZ->blue_Y;
+ Y = Ytemp;
if (Y != PNG_FP_1)
{
diff --git a/png/png.h b/png/png.h
index 83d390312..04a233f39 100644
--- a/png/png.h
+++ b/png/png.h
@@ -1,7 +1,7 @@
/* png.h - header file for PNG reference library
*
- * libpng version 1.6.43
+ * libpng version 1.6.44
*
* Copyright (c) 2018-2024 Cosmin Truta
* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
@@ -15,7 +15,7 @@
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
* libpng versions 0.97, January 1998, through 1.6.35, July 2018:
* Glenn Randers-Pehrson
- * libpng versions 1.6.36, December 2018, through 1.6.43, February 2024:
+ * libpng versions 1.6.36, December 2018, through 1.6.44, September 2024:
* Cosmin Truta
* See also "Contributing Authors", below.
*/
@@ -239,7 +239,7 @@
* ...
* 1.5.30 15 10530 15.so.15.30[.0]
* ...
- * 1.6.43 16 10643 16.so.16.43[.0]
+ * 1.6.44 16 10644 16.so.16.44[.0]
*
* Henceforth the source version will match the shared-library major and
* minor numbers; the shared-library major version number will be used for
@@ -275,7 +275,7 @@
*/
/* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.6.43"
+#define PNG_LIBPNG_VER_STRING "1.6.44"
#define PNG_HEADER_VERSION_STRING " libpng version " PNG_LIBPNG_VER_STRING "\n"
/* The versions of shared library builds should stay in sync, going forward */
@@ -286,18 +286,18 @@
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
#define PNG_LIBPNG_VER_MAJOR 1
#define PNG_LIBPNG_VER_MINOR 6
-#define PNG_LIBPNG_VER_RELEASE 43
+#define PNG_LIBPNG_VER_RELEASE 44
/* This should be zero for a public release, or non-zero for a
* development version.
*/
-#define PNG_LIBPNG_VER_BUILD 0
+#define PNG_LIBPNG_VER_BUILD 0
/* Release Status */
-#define PNG_LIBPNG_BUILD_ALPHA 1
-#define PNG_LIBPNG_BUILD_BETA 2
-#define PNG_LIBPNG_BUILD_RC 3
-#define PNG_LIBPNG_BUILD_STABLE 4
+#define PNG_LIBPNG_BUILD_ALPHA 1
+#define PNG_LIBPNG_BUILD_BETA 2
+#define PNG_LIBPNG_BUILD_RC 3
+#define PNG_LIBPNG_BUILD_STABLE 4
#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
/* Release-Specific Flags */
@@ -317,7 +317,7 @@
* From version 1.0.1 it is:
* XXYYZZ, where XX=major, YY=minor, ZZ=release
*/
-#define PNG_LIBPNG_VER 10643 /* 1.6.43 */
+#define PNG_LIBPNG_VER 10644 /* 1.6.44 */
/* Library configuration: these options cannot be changed after
* the library has been built.
@@ -427,7 +427,7 @@ extern "C" {
/* This triggers a compiler error in png.c, if png.c and png.h
* do not agree upon the version number.
*/
-typedef char* png_libpng_version_1_6_43;
+typedef char* png_libpng_version_1_6_44;
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
*
@@ -824,7 +824,7 @@ typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp,
* your compiler. This may be very difficult - try using a different compiler
* to build the library!
*/
-PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
+PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), (jmp_buf, int), typedef);
#endif
/* Transform masks for the high-level interface */
diff --git a/png/pngconf.h b/png/pngconf.h
index 000d7b1a8..4a4b58ac8 100644
--- a/png/pngconf.h
+++ b/png/pngconf.h
@@ -1,7 +1,7 @@
/* pngconf.h - machine-configurable file for libpng
*
- * libpng version 1.6.43
+ * libpng version 1.6.44
*
* Copyright (c) 2018-2024 Cosmin Truta
* Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson
@@ -88,7 +88,7 @@
/* The PNGARG macro was used in versions of libpng prior to 1.6.0 to protect
* against legacy (pre ISOC90) compilers that did not understand function
- * prototypes. It is not required for modern C compilers.
+ * prototypes. [Deprecated.]
*/
#ifndef PNGARG
# define PNGARG(arglist) arglist
@@ -298,7 +298,7 @@
#ifndef PNG_EXPORTA
# define PNG_EXPORTA(ordinal, type, name, args, attributes) \
- PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), PNGARG(args), \
+ PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), args, \
PNG_LINKAGE_API attributes)
#endif
@@ -316,7 +316,7 @@
#endif
#ifndef PNG_CALLBACK
-# define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args)
+# define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) args
#endif
/* Support for compiler specific function attributes. These are used
diff --git a/png/pngerror.c b/png/pngerror.c
index 29ebda794..1babf9f8d 100644
--- a/png/pngerror.c
+++ b/png/pngerror.c
@@ -20,13 +20,14 @@
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-static PNG_FUNCTION(void, png_default_error,PNGARG((png_const_structrp png_ptr,
- png_const_charp error_message)),PNG_NORETURN);
+static PNG_FUNCTION(void /* PRIVATE */,
+png_default_error,(png_const_structrp png_ptr, png_const_charp error_message),
+ PNG_NORETURN);
#ifdef PNG_WARNINGS_SUPPORTED
static void /* PRIVATE */
-png_default_warning PNGARG((png_const_structrp png_ptr,
- png_const_charp warning_message));
+png_default_warning(png_const_structrp png_ptr,
+ png_const_charp warning_message);
#endif /* WARNINGS */
/* This function is called whenever there is a fatal error. This function
diff --git a/png/pnglibconf.h b/png/pnglibconf.h
index 55014e27d..b19b2b4b6 100644
--- a/png/pnglibconf.h
+++ b/png/pnglibconf.h
@@ -1,15 +1,6 @@
-/*
-** FLTK specific PNG lib configuration file -- see README.bundled-libs.txt
-**
-** This file must be generated on Linux in a libpng distribution using:
-** $ ./configure --with-libpng-prefix=fltk_
-** $ make
-** All lines including the 'fltk_' prefix must be upgraded with libpng.
-*/
-
/* pnglibconf.h - library build configuration */
-/* libpng version 1.6.43 */
+/* libpng version 1.6.44 */
/* Copyright (c) 2018-2024 Cosmin Truta */
/* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */
diff --git a/png/pngprefix.h b/png/pngprefix.h
index e22555e56..9fcc0ad12 100644
--- a/png/pngprefix.h
+++ b/png/pngprefix.h
@@ -56,6 +56,13 @@
#define png_do_read_interlace fltk_png_do_read_interlace
#define png_do_write_interlace fltk_png_do_write_interlace
#define png_read_filter_row fltk_png_read_filter_row
+#define png_read_filter_row_up_neon fltk_png_read_filter_row_up_neon
+#define png_read_filter_row_sub3_neon fltk_png_read_filter_row_sub3_neon
+#define png_read_filter_row_sub4_neon fltk_png_read_filter_row_sub4_neon
+#define png_read_filter_row_avg3_neon fltk_png_read_filter_row_avg3_neon
+#define png_read_filter_row_avg4_neon fltk_png_read_filter_row_avg4_neon
+#define png_read_filter_row_paeth3_neon fltk_png_read_filter_row_paeth3_neon
+#define png_read_filter_row_paeth4_neon fltk_png_read_filter_row_paeth4_neon
#define png_write_find_filter fltk_png_write_find_filter
#define png_read_IDAT_data fltk_png_read_IDAT_data
#define png_read_finish_IDAT fltk_png_read_finish_IDAT
@@ -159,4 +166,8 @@
#define png_safe_warning fltk_png_safe_warning
#define png_safe_execute fltk_png_safe_execute
#define png_image_error fltk_png_image_error
+#define png_init_filter_functions_neon fltk_png_init_filter_functions_neon
#define png_check_keyword fltk_png_check_keyword
+#define png_riffle_palette_neon fltk_png_riffle_palette_neon
+#define png_do_expand_palette_rgba8_neon fltk_png_do_expand_palette_rgba8_neon
+#define png_do_expand_palette_rgb8_neon fltk_png_do_expand_palette_rgb8_neon
diff --git a/png/pngpriv.h b/png/pngpriv.h
index 9bfdb7134..b59084e7e 100644
--- a/png/pngpriv.h
+++ b/png/pngpriv.h
@@ -140,47 +140,6 @@
* callbacks to do this.
*/
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_neon
-
- /* By default the 'intrinsics' code in arm/filter_neon_intrinsics.c is used
- * if possible - if __ARM_NEON__ is set and the compiler version is not known
- * to be broken. This is controlled by PNG_ARM_NEON_IMPLEMENTATION which can
- * be:
- *
- * 1 The intrinsics code (the default with __ARM_NEON__)
- * 2 The hand coded assembler (the default without __ARM_NEON__)
- *
- * It is possible to set PNG_ARM_NEON_IMPLEMENTATION in CPPFLAGS, however
- * this is *NOT* supported and may cease to work even after a minor revision
- * to libpng. It *is* valid to do this for testing purposes, e.g. speed
- * testing or a new compiler, but the results should be communicated to the
- * libpng implementation list for incorporation in the next minor release.
- */
-# ifndef PNG_ARM_NEON_IMPLEMENTATION
-# if defined(__ARM_NEON__) || defined(__ARM_NEON)
-# if defined(__clang__)
- /* At present it is unknown by the libpng developers which versions
- * of clang support the intrinsics, however some or perhaps all
- * versions do not work with the assembler so this may be
- * irrelevant, so just use the default (do nothing here.)
- */
-# elif defined(__GNUC__)
- /* GCC 4.5.4 NEON support is known to be broken. 4.6.3 is known to
- * work, so if this *is* GCC, or G++, look for a version >4.5
- */
-# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
-# define PNG_ARM_NEON_IMPLEMENTATION 2
-# endif /* no GNUC support */
-# endif /* __GNUC__ */
-# else /* !defined __ARM_NEON__ */
- /* The 'intrinsics' code simply won't compile without this -mfpu=neon:
- */
-# if !defined(__aarch64__) && !defined(_M_ARM64)
- /* The assembler code currently does not work on ARM64 */
-# define PNG_ARM_NEON_IMPLEMENTATION 2
-# endif /* __aarch64__ */
-# endif /* __ARM_NEON__ */
-# endif /* !PNG_ARM_NEON_IMPLEMENTATION */
-
# ifndef PNG_ARM_NEON_IMPLEMENTATION
/* Use the intrinsics code by default. */
# define PNG_ARM_NEON_IMPLEMENTATION 1