Code:  sample(png_const_bytep row, png_byte colour_type, png_byte bit_depth,
    png_uint_32 x, unsigned int sample_index)
 {
    png_uint_32 bit_index, result;
 
 /* Find a sample index for the desired sample: */
   x *= bit_depth;
   bit_index = x;

 if ((colour_type & 1) == 0) /* !palette */
 {
 if (colour_type & 2)
         bit_index *= 3;

 if (colour_type & 4)
         bit_index += x; /* Alpha channel */

 /* Multiple channels; select one: */
 if (colour_type & (2+4))
         bit_index += sample_index * bit_depth;
 }

 /* Return the sample from the row as an integer. */
   row += bit_index >> 3;
   result = *row;

 if (bit_depth == 8)

       return result;
 
    else if (bit_depth > 8)
      return (result << 8) + *++row;
 
   /* Less than 8 bits per sample. */
    bit_index &= 7;
   return (result >> (8-bit_index-bit_depth)) & ((1U<<bit_depth)-1);
 }

Vulnerability Type: +Priv 
CWE ID: 
Summary: Unspecified vulnerability in libpng before 1.6.20, as used in Android 4.x before 4.4.4, 5.0.x before 5.0.2, 5.1.x before 5.1.1, and 6.x before 2016-07-01, allows attackers to gain privileges via a crafted application, as demonstrated by obtaining Signature or SignatureOrSystem access, aka internal bug 23265085.
Commit Message: DO NOT MERGE Update libpng to 1.6.20

BUG:23265085
Change-Id: I85199805636d771f3597b691b63bc0bf46084833
(cherry picked from commit bbe98b40cda082024b669fa508931042eed18f82)
