[libpng16] Cleaned up and corrected ICC profile handling.

    contrib/libtests/makepng: corrected 'rgb' and 'gray' cases.  profile_error
    messages could be truncated; made a correct buffer size calculation and
    adjusted pngerror.c appropriately. png_icc_check_* checking improved;
    changed the functions to receive the correct color type of the PNG on read
    or write and check that it matches the color space of the profile (despite
    what the comments said before, there is danger in assuming the app will
    cope correctly with an RGB profile on a grayscale image and, since it
    violates the PNG spec, allowing it is certain to produce inconsistent
    app behavior and might even cause app crashes.) Check that profiles
    contain the tags needed to process the PNG (tags all required by the ICC
    spec). Removed unused PNG_STATIC from pngpriv.h.
diff --git a/pngset.c b/pngset.c
index 17bfe72..c7d2d5e 100644
--- a/pngset.c
+++ b/pngset.c
@@ -643,11 +643,14 @@
 
    /* Set the colorspace first because this validates the profile; do not
     * override previously set app cHRM or gAMA here (because likely as not the
-    * application knows better than libpng what the correct values are.)
+    * application knows better than libpng what the correct values are.)  Pass
+    * the info_ptr color_type field to png_colorspace_set_ICC because in the
+    * write case it has not yet been stored in png_ptr.
     */
    {
       int result = png_colorspace_set_ICC(png_ptr, &info_ptr->colorspace, name,
-         proflen, profile, 0/* do *not* override the app cHRM or gAMA */);
+         proflen, profile, 0/* do *not* override the app cHRM or gAMA */,
+         info_ptr->color_type);
 
       png_colorspace_sync_info(png_ptr, info_ptr);