diff --git a/ANNOUNCE b/ANNOUNCE
index 9f66cd9..6ce05eb 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,5 +1,5 @@
 
-Libpng 1.4.15rc01 - February 5, 2015
+Libpng 1.4.15rc02 - February 6, 2015
 
 This is not intended to be a public release.  It will be replaced
 within a few weeks by a public version or by another test version.
@@ -9,21 +9,21 @@
 Source files with LF line endings (for Unix/Linux) and with a
 "configure" script
 
-   1.4.15rc01.tar.xz (LZMA-compressed, recommended)
-   1.4.15rc01.tar.gz
-   1.4.15rc01.tar.bz2
+   1.4.15rc02.tar.xz (LZMA-compressed, recommended)
+   1.4.15rc02.tar.gz
+   1.4.15rc02.tar.bz2
 
 Source files with CRLF line endings (for Windows), without the
 "configure" script
 
-   lp1415r01.7z (LZMA-compressed, recommended)
-   lp1415r01.zip
+   lp1415r02.7z (LZMA-compressed, recommended)
+   lp1415r02.zip
 
 Other information:
 
-   1.4.15rc01-README.txt
-   1.4.15rc01-LICENSE.txt
-   libpng-1.4.15rc01-*.asc (armored detached GPG signatures)
+   1.4.15rc02-README.txt
+   1.4.15rc02-LICENSE.txt
+   libpng-1.4.15rc02-*.asc (armored detached GPG signatures)
 
 Changes since the last public release (1.4.14):
 
@@ -37,6 +37,9 @@
 version 1.4.15rc01 [February 5, 2015]
   No changes.
 
+version 1.4.15rc02 [February 6, 2015]
+  Quieted more harmless warnings from Coverity-scan.
+
 Send comments/corrections/commendations to glennrp at users.sourceforge.net
 or to png-mng-implement at lists.sf.net (subscription required; visit
 https://lists.sourceforge.net/lists/listinfo/png-mng-implement).
diff --git a/CHANGES b/CHANGES
index a1f0210..b9322b4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2932,6 +2932,9 @@
 version 1.4.15rc01 [February 5, 2015]
   No changes.
 
+version 1.4.15rc02 [February 6, 2015]
+  Quieted more harmless warnings from Coverity-scan.
+
 Send comments/corrections/commendations to glennrp at users.sourceforge.net
 or to png-mng-implement at lists.sf.net (subscription required; visit
 https://lists.sourceforge.net/lists/listinfo/png-mng-implement).
diff --git a/png.h b/png.h
index bfd29c2..66735db 100644
--- a/png.h
+++ b/png.h
@@ -1,8 +1,8 @@
 
 /* png.h - header file for PNG reference library
  *
- * libpng version 1.4.15rc01 - February 5, 2015
- * Copyright (c) 1998-2011 Glenn Randers-Pehrson
+ * libpng version 1.4.15rc02 - February 6, 2015
+ * Copyright (c) 1998-2015 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
  *
@@ -11,7 +11,7 @@
  * Authors and maintainers:
  *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
  *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
- *  libpng versions 0.97, January 1998, through 1.4.15rc01 - February 5, 2015: Glenn
+ *  libpng versions 0.97, January 1998, through 1.4.15rc02 - February 6, 2015: Glenn
  *  See also "Contributing Authors", below.
  *
  * Note about libpng version numbers:
@@ -209,7 +209,7 @@
  *
  * This code is released under the libpng license.
  *
- * libpng versions 1.2.6, August 15, 2004, through 1.4.15rc01, February 5, 2015, are
+ * libpng versions 1.2.6, August 15, 2004, through 1.4.15rc02, February 6, 2015, are
  * Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are
  * distributed according to the same disclaimer and license as libpng-1.2.5
  * with the following individual added to the list of Contributing Authors:
@@ -321,13 +321,13 @@
  * Y2K compliance in libpng:
  * =========================
  *
- *    February 5, 2015
+ *    February 6, 2015
  *
  *    Since the PNG Development group is an ad-hoc body, we can't make
  *    an official declaration.
  *
  *    This is your unofficial assurance that libpng from version 0.71 and
- *    upward through 1.4.15rc01 are Y2K compliant.  It is my belief that earlier
+ *    upward through 1.4.15rc02 are Y2K compliant.  It is my belief that earlier
  *    versions were also Y2K compliant.
  *
  *    Libpng only has three year fields.  One is a 2-byte unsigned integer
@@ -383,9 +383,9 @@
  */
 
 /* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.4.15rc01"
+#define PNG_LIBPNG_VER_STRING "1.4.15rc02"
 #define PNG_HEADER_VERSION_STRING \
-   " libpng version 1.4.15rc01 - February 5, 2015\n"
+   " libpng version 1.4.15rc02 - February 6, 2015\n"
 
 #define PNG_LIBPNG_VER_SONUM   14
 #define PNG_LIBPNG_VER_DLLNUM  14
@@ -398,7 +398,7 @@
  * PNG_LIBPNG_VER_STRING, omitting any leading zero:
  */
 
-#define PNG_LIBPNG_VER_BUILD  01
+#define PNG_LIBPNG_VER_BUILD  02
 
 /* Release Status */
 #define PNG_LIBPNG_BUILD_ALPHA    1
@@ -1509,7 +1509,7 @@
 /* This triggers a compiler error in png.c, if png.c and png.h
  * do not agree upon the version number.
  */
-typedef png_structp version_1_4_15rc01;
+typedef png_structp version_1_4_15rc02;
 
 typedef png_struct FAR * FAR * png_structpp;
 
@@ -2675,10 +2675,10 @@
  * format for negative values, which is almost certainly true.
  */
 #  define png_get_uint_32(buf) \
-     (((png_uint_32)(*(buf)) << 24) + \
-      ((png_uint_32)(*((buf) + 1)) << 16) + \
-      ((png_uint_32)(*((buf) + 2)) << 8) + \
-      ((png_uint_32)(*((buf) + 3))))
+     (((png_uint_32)((*(buf)) & 0xff) << 24) + \
+      ((png_uint_32)((*((buf) + 1)) & 0xff) << 16) + \
+      ((png_uint_32)((*((buf) + 2)) & 0xff) << 8) + \
+      ((png_uint_32)((*((buf) + 3)) & 0xff)))
 
   /* The following definition introduces an API incompatibility (but not
    * an ABI incompatibility) with libpng-1.4.0 through 1.4.4.  Prior to
diff --git a/pngrutil.c b/pngrutil.c
index 90cb6f2..3e49c1f 100644
--- a/pngrutil.c
+++ b/pngrutil.c
@@ -1,8 +1,8 @@
 
 /* pngrutil.c - utilities to read a PNG file
  *
- * Last changed in libpng 1.4.10 [March 8, 2012]
- * Copyright (c) 1998-2012 Glenn Randers-Pehrson
+ * Last changed in libpng 1.4.15 [%RDATE%]
+ * Copyright (c) 1998-2015 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
  *
@@ -73,9 +73,8 @@
     * on 32 bit systems.  (Pre-ANSI systems did not make integers smaller
     * than 16 bits either.)
     */
-   unsigned int val =
-       ((unsigned int)(*buf) << 8) +
-       ((unsigned int)(*(buf + 1)));
+   unsigned int val = ((unsigned int)((*(buf     )) & 0xff) << 8) +
+                      ((unsigned int)((*(buf +  1)) & 0xff)     );
 
    return (png_uint_16)val;
 }
@@ -332,12 +331,15 @@
 
             png_snprintf(umsg, sizeof umsg, msg, png_ptr->chunk_name);
             msg = umsg;
+            png_warning(png_ptr, msg);
 #else
             msg = "Damaged compressed datastream in chunk other than IDAT";
 #endif
          }
 
+#ifndef PNG_STDIO_SUPPORTED
          png_warning(png_ptr, msg);
+#endif
       }
 
       /* 0 means an error - notice that this code simple ignores
@@ -1171,10 +1173,10 @@
 
    /* Check the profile_size recorded in the first 32 bits of the ICC profile */
    pC = (png_bytep)(png_ptr->chunkdata + prefix_length);
-   profile_size = ((*(pC    ))<<24) |
-                  ((*(pC + 1))<<16) |
-                  ((*(pC + 2))<< 8) |
-                  ((*(pC + 3))    );
+   profile_size = (((*(pC    )) & 0xff) << 24) |
+                  (((*(pC + 1)) & 0xff) << 16) |
+                  (((*(pC + 2)) & 0xff) <<  8) |
+                  (((*(pC + 3)) & 0xff)      );
 
    if (profile_size < profile_length)
       profile_length = profile_size;
