188 Commits

Author SHA1 Message Date
John Bowler
0301cc2627 Update pngstest-errors.h for new make check tests
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 12:20:36 -07:00
John Bowler
2c13de800f Merge remote-tracking branch 'glennrp/libpng17' into libpng17
Changes from Glenn for legal reasons
2015-09-24 17:44:05 -07:00
John Bowler
d394d889e1 png_rgb_to_gray optimization fixes
This fixes the code that optimizes RGB to Gray transformations that only
selected on channel and clarifies the handling of max_depth in the transform
code.  It eliminates some UNTESTED cases and removes the write 'invert alpha'
UNTESTED macro because, while there are no test cases for it, code review
some months after writing it suggests it is ok.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-24 17:33:32 -07:00
Glenn Randers-Pehrson
40d90d34a8 [libpng17] Add copyright and license to contrib/testpngs/makepngs.sh 2015-09-22 16:04:26 -05:00
John Bowler
3f6efbd8e2 Squashed commit of the following:
commit bf51c644f7d29400d884e20def9a0bee74904308
Author: John Bowler <jbowler@acm.org>
Date:   Tue Sep 22 09:05:13 2015 -0700

    Updated contrib/testpngs/*.png

    Corrected copyright/licensing information, corrected filtering.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 05399c8c82d7b188357dc6fa05a8cdd89426b155
Author: John Bowler <jbowler@acm.org>
Date:   Tue Sep 22 09:04:03 2015 -0700

    makepng.c: correct the first row filter setting

    It needs to include the "UP" filter so that libpng knows to retain the first
    line for the UP filter on the next one.  Without this libpng ended up using NONE
    for the second line.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 8fae6609c063c7e0a5eeb592f8eec15849617ae9
Author: John Bowler <jbowler@acm.org>
Date:   Mon Sep 21 17:15:45 2015 -0700

    makepng: spelling corrections, single test output

    Corrections to some obvious mistakes, plus one output file.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit a2245a2c54a679d25f8f1609f85654d155936863
Author: John Bowler <jbowler@acm.org>
Date:   Mon Sep 21 13:39:48 2015 -0700

    Updated testpngs files with new Licensing tag

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 46d3f863cace5b7aa769c9b882fca49e2a821138
Author: John Bowler <jbowler@acm.org>
Date:   Mon Sep 21 13:38:34 2015 -0700

    Updated makepng.c

    This supports more test cases and a reduced licence keyword (now licensing).
    The extra text cases require more slack in pngstest.c

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 7c9a08b8bc5e2542184d4abb25c33c516bc0adc7
Author: John Bowler <jbowler@acm.org>
Date:   Sun Sep 20 20:55:19 2015 -0700

    Test PNG files

    These files were generated by contrib/testpngs/makepngs.sh --small with MAKEPNG
    set to the makepng compiled from the current contrib/libtests/makepngs.sh

    Signed-off-by: John Bowler <jbowler@acm.org>

commit c2a8a01b2ac733b8029478d10f700f5ab8a713f2
Author: John Bowler <jbowler@acm.org>
Date:   Sun Sep 20 20:51:06 2015 -0700

    makepng --small

    This patch adds code to 'makepng' to allow the generation of smaller images that
    also give better test case coverage.  It also adds copyright and licence to the
    generated images, reflecting the fact that they are original works of the author
    of the code.  The licence used is the Creative Commons Public Domain one,
    appropriate to a non-source-code work.

    The resultant image were used to generate the updated pngstest-errors.h file in
    a prior commit.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 8c025bcf3fdfb68fb8b1e5fab4b7deb0f94453f6
Author: John Bowler <jbowler@acm.org>
Date:   Sun Sep 20 20:40:52 2015 -0700

    Simplified API sRGB gamma handling correction

    If a gamma encoded file that has a gamma not matching that of sRGB is passed to
    the simplified API the previous code simply interpreted it as a power law
    encoding.  However old Mac files had a power law correction of 1.45 built in to
    the encoding, even though the display devices were consistent with sRGB.
    Assuming a power law encoding results in substantial differences in the
    interpretation of low 8-bit values; below 10.  For example an Apple '5' which is
    equivalent to an sRGB '17' ends up as the value '8'.

    This patch provides some measure of correction for this by making the gamma
    correction done within the simplified API assume that any encoded data is
    encoded relative to an sRGB-like transfer function; the data is corrected back
    to the PNG-nominal 2.2 value then decoded to linear (if required) using the sRGB
    transfer function.

    This reduces the errors reported by pngstest for such files (colormapped ones)
    but still leaves the issue with files where the standard libpng code does the
    gamma decoding.  To cope with the latter cases the patch also includes a new
    pngstest-errors which allows the result, however this is still a
    work-in-progress; a better solution is possible.

    Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-22 13:46:19 -05:00
John Bowler
05399c8c82 makepng.c: correct the first row filter setting
It needs to include the "UP" filter so that libpng knows to retain the first
line for the UP filter on the next one.  Without this libpng ended up using NONE
for the second line.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-22 09:04:03 -07:00
John Bowler
8fae6609c0 makepng: spelling corrections, single test output
Corrections to some obvious mistakes, plus one output file.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-21 17:15:45 -07:00
John Bowler
46d3f863ca Updated makepng.c
This supports more test cases and a reduced licence keyword (now licensing).
The extra text cases require more slack in pngstest.c

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-21 13:38:34 -07:00
John Bowler
c2a8a01b2a makepng --small
This patch adds code to 'makepng' to allow the generation of smaller images that
also give better test case coverage.  It also adds copyright and licence to the
generated images, reflecting the fact that they are original works of the author
of the code.  The licence used is the Creative Commons Public Domain one,
appropriate to a non-source-code work.

The resultant image were used to generate the updated pngstest-errors.h file in
a prior commit.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-20 20:51:06 -07:00
John Bowler
8c025bcf3f Simplified API sRGB gamma handling correction
If a gamma encoded file that has a gamma not matching that of sRGB is passed to
the simplified API the previous code simply interpreted it as a power law
encoding.  However old Mac files had a power law correction of 1.45 built in to
the encoding, even though the display devices were consistent with sRGB.
Assuming a power law encoding results in substantial differences in the
interpretation of low 8-bit values; below 10.  For example an Apple '5' which is
equivalent to an sRGB '17' ends up as the value '8'.

This patch provides some measure of correction for this by making the gamma
correction done within the simplified API assume that any encoded data is
encoded relative to an sRGB-like transfer function; the data is corrected back
to the PNG-nominal 2.2 value then decoded to linear (if required) using the sRGB
transfer function.

This reduces the errors reported by pngstest for such files (colormapped ones)
but still leaves the issue with files where the standard libpng code does the
gamma decoding.  To cope with the latter cases the patch also includes a new
pngstest-errors which allows the result, however this is still a
work-in-progress; a better solution is possible.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-20 20:40:52 -07:00
Glenn Randers-Pehrson
69f2152c0f [libpng17] Added license info to pngstest-errors.h and its generator. 2015-09-19 20:18:49 -05:00
John Bowler
8a9a3fb4dd pngstest: make error limits version specific
Splitting the machine generated error structs out to a file allows the values to
be updated without changing pngstest.c itself, sine libpng 1.6 and 1.7 have
slightly different error limits this simplifies maintenance.

makepngs.sh has also been updated to more accurately reflect current problems in
libpng 1.7

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-19 16:21:36 -07:00
John Bowler
38647d4b21 [libpng17] Fixed makepng.c so that it compiles with GCC 5.1.0.
Added contrib/testspngs/: a directory for additional test png files
2015-09-18 16:36:57 -05:00
John Bowler
62dff2f97e Merge branch 'libpng17' of /home/jbowler/src/libpng/libpng into libpng17 2015-09-16 21:42:04 -07:00
John Bowler
601ae5387e [libpng17] correct low-depth-gray code and enable tests
The low-bit-depth gray tests were disabled in prior versions of libpng because
of problems which should have been fixed by the recent changes to libpng17,
enabling the tests reveals bugs in those changes which are fixed by this commit.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-16 21:09:10 -07:00
Glenn Randers-Pehrson
bfc7affa0d [libpng17] Imported from libpng-1.7.0beta65.tar 2015-09-16 10:19:29 -05:00
Glenn Randers-Pehrson
c68de14844 [libpng17] Merge contrib/libtests and contrib/tools with libpng16. 2015-09-15 17:11:43 -05:00
Glenn Randers-Pehrson
cc7fa5e23f [libpng17] Added public domain declaration to contrib/libtests/fakepng.c 2015-09-15 15:21:12 -05:00
John Bowler
c5ead5d2cd Test changes
Most of these are back-portable to earlier versions (contrib/libtests
should just work with earlier versions), however the 1.7 specific
changes in pngvalid mean that it probably won't work against 1.7 without
the commits following this one.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-14 17:57:40 -07:00
Glenn Randers-Pehrson
9acee8b4b2 [libpng17] Unlink temporary file immediately in pngstest (PNG_USE_MKSTEMP) 2015-06-11 16:30:44 -05:00
Glenn Randers-Pehrson
24382d838c [libpng17] Eliminated the final two Coverity defects (insecure temporary file
handling in contrib/libtests/pngstest.c; possible overflow of
unsigned char in contrib/tools/png-fix-itxt.c). To use the "secure"
file handling, define PNG_USE_MKSTEMP, otherwise "tmpfile()" will
be used.
2015-06-10 06:59:18 -05:00
Glenn Randers-Pehrson
0781bc4905 [libpng17] Imported from libpng-1.7.0beta63.tar 2015-06-06 16:30:46 -05:00
Glenn Randers-Pehrson
77476d3c37 [libpng16] Quieted Coverity issues in pngfix.c, png-fix-itxt.c, pngvalid.c,
pngstest.c, and pngimage.c. Most seem harmless, but png-fix-itxt
would only work with iTXt chunks with length 255 or less.

Fixed cexcept.h in which GCC 5 reported that one of the auto
variables in the Try macro needs to be volatile to prevent value
being lost over the setjmp, and fixed g++ build breaks (John Bowler).
2015-06-03 22:52:33 -05:00
Glenn Randers-Pehrson
a671f8baea [libpng17] Quieted Coverity issues in pngfix.c, png-fix-itxt.c, pngvalid.c,
pngstest.c, and pngimage.c. Most seem harmless, but png-fix-itxt
would only work with iTXt chunks with length 255 or less.
2015-06-03 16:21:57 -05:00
John Bowler
673ae608ab [libpng17] Transformed rewrite: changed row_info, added checks. This introduces an
internal struct (png_transform_control) to replace row_info and uses
    that to implement affirms correctly.  The change also adds checks on
    the rowbytes calculation and additional checks on most transform
    implementations.
Added png_uint_16 range checking, pngvalid tRNS, fixed png_uint_16:
    review of previous checks, removal of some where SAFE. pngvalid: add
    testing of tRNS for better code coverage pngvalid: correct rgb-to-gray
    error calculations. Code coverage is still incomplete: see /*UNTESTED*/
    in pngrtran.c
2015-03-30 21:32:41 -05:00
Glenn Randers-Pehrson
67890a19f3 [libpng17] Committed pngvalid.c omitted from previous commit; fix trivial typos 2015-03-22 21:01:48 -05:00
Glenn Randers-Pehrson
b1d49de5bc [libpng17] Happy New Year -- update copyright year. 2014-12-31 18:43:44 -06:00
John Bowler
28451a8797 [libpng17] Implement previously untested libpng transforms in pngvalid.c 2014-12-29 14:18:50 -06:00
John Bowler
a5b6764cea [libpng17] Added testing of png_set_packing() to pngvalid.c 2014-12-27 19:11:41 -06:00
Glenn Randers-Pehrson
b23a10f565 [libpng17] Imported from libpng-1.7.0beta43.tar 2014-12-18 09:00:17 -06:00
John Bowler
201e9144a6 [libpng17] Quiet a "comparison always true" warning in pngstest.c (John Bowler). 2014-12-16 19:16:18 -06:00
John Bowler
f87df31c8c [libpng17] Fixed GCC unsigned int->float warnings. Various versions of GCC
seem to generate warnings when an unsigned value is implicitly
    converted to double. This is probably a GCC bug but this change
    avoids the issue by explicitly converting to (int) where safe.
  Free all allocated memory in pngimage. The file buffer cache was left
    allocated at the end of the program, harmless but it causes memory
    leak reports from clang.
  Fixed array size calculations to avoid warnings. At various points
    in the code the number of elements in an array is calculated using
    sizeof.  This generates a compile time constant of type (size_t) which
    is then typically assigned to an (unsigned int) or (int). Some versions
    of GCC on 64-bit systems warn about the apparent narrowing, even though
    the same compiler does apparently generate the correct, in-range,
    numeric constant.  This adds appropriate, safe, casts to make the
    warnings go away.
2014-11-05 18:53:01 -06:00
Glenn Randers-Pehrson
4f8050416f [libpng17] Merge pngvalid.c and pngfix.c with libpng-1.6.14beta04 2014-09-28 10:37:26 -05:00
Glenn Randers-Pehrson
776d1768aa [libpng17] Merge pngvalid.c with libpng-1.6.14beta04. 2014-09-27 19:30:35 -05:00
Glenn Randers-Pehrson
4a67ac3f1e [libpng17] Imported from libpng-1.7.0beta36.tar 2014-09-27 18:52:47 -05:00
Glenn Randers-Pehrson
1a9c06b11a [libpng17] Imported from libpng-1.7.0beta35.tar 2014-08-06 09:10:02 -05:00
Glenn Randers-Pehrson
b407af6503 [libpng17] Imported from libpng-1.7.0beta34.tar 2014-03-17 13:19:20 -05:00
Glenn Randers-Pehrson
f99393490d [libpng17] Imported from libpng-1.7.0beta32.tar 2014-02-26 12:54:47 -06:00
John Bowler
2ced844b0e [libpng17] Deleted a now-redundant #define png_error from pngvalid.c 2014-02-16 22:51:23 -06:00
Glenn Randers-Pehrson
9a3f244085 [libpng17] Imported from libpng-1.7.0beta31.tar 2014-02-05 22:46:04 -06:00
Glenn Randers-Pehrson
98b9371115 [libpng17] Fixed some typos in commentary of pngimage.c 2014-02-05 13:21:41 -06:00
John Bowler
dc63b03da1 [libpng17] Completed full working pngimage test program and added two test
scripts.  Fixed combination of ~alpha with shift. On read invert alpha,
processing occurred after shift processing, which causes the final values to be
outside the range that should be produced by the shift. Reversing the
order on read makes the two transforms work together correctly and mirrors
the order used on write.
2014-02-05 11:39:59 -06:00
Glenn Randers-Pehrson
302c58b8cf [libpng17] Added pngimage test program for png_read_png and png_write_png.
This is a work-in-progress; no tests are run automatically at present and
the program by virtue of exhaustively testing all the transforms is
very slow.
2014-01-31 22:00:27 -06:00
Glenn Randers-Pehrson
39fee3cee1 [libpng17] Fixed a large number of instances where PNGCBAPI was omitted from
function definitions.
2014-01-31 21:55:27 -06:00
Glenn Randers-Pehrson
28711dff2a [libpng17] Updated copyright year in recently-changed files. 2013-12-31 21:15:11 -06:00
John Bowler
206d1eed42 [libpng17] Changed pngvalid.c to support libpng 1.5, which does not support
the PNG_MAXIMUM_INFLATE_WINDOW option, so #define it out when
appropriate in pngvalid.c
2013-12-29 15:57:30 -06:00
John Bowler
114fa16ab3 [libpng17] Fixed test programs for interlace options. Made pngvalid.c and
pngtest.c work correctly when READ_INTERLACING and/or WRITE_INTERLACING
are switched off.
2013-12-29 10:33:58 -06:00
John Bowler
e98229ceb0 [libpng17] Merged with 1.5 and 1.6 changes to create a single pngvalid.c 2013-12-27 08:04:49 -06:00
John Bowler
ad1a4c8cc3 [libpng17] Added libpng 1.5 checks to pngvalid.c 2013-12-27 07:53:50 -06:00
Glenn Randers-Pehrson
9e168ea2c9 [libpng17] Merged files with version 1.6.8 that have not changed since then. 2013-12-19 20:33:08 -06:00