png_ptr->push_length = png_get_uint_32(chunk_length);
png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length);
png_push_read_chunk(png_structp png_ptr, png_infop info_ptr){#ifdef PNG_USE_LOCAL_ARRAYS      PNG_IHDR;      PNG_IDAT;      PNG_IEND;      PNG_PLTE;#if defined(PNG_READ_bKGD_SUPPORTED)      PNG_bKGD;#endif#if defined(PNG_READ_cHRM_SUPPORTED)      PNG_cHRM;#endif#if defined(PNG_READ_gAMA_SUPPORTED)      PNG_gAMA;#endif#if defined(PNG_READ_hIST_SUPPORTED)      PNG_hIST;#endif#if defined(PNG_READ_iCCP_SUPPORTED)      PNG_iCCP;#endif#if defined(PNG_READ_iTXt_SUPPORTED)      PNG_iTXt;#endif#if defined(PNG_READ_oFFs_SUPPORTED)      PNG_oFFs;#endif#if defined(PNG_READ_pCAL_SUPPORTED)      PNG_pCAL;#endif#if defined(PNG_READ_pHYs_SUPPORTED)      PNG_pHYs;#endif#if defined(PNG_READ_sBIT_SUPPORTED)      PNG_sBIT;#endif#if defined(PNG_READ_sCAL_SUPPORTED)      PNG_sCAL;#endif#if defined(PNG_READ_sRGB_SUPPORTED)      PNG_sRGB;#endif#if defined(PNG_READ_sPLT_SUPPORTED)      PNG_sPLT;#endif#if defined(PNG_READ_tEXt_SUPPORTED)      PNG_tEXt;#endif#if defined(PNG_READ_tIME_SUPPORTED)      PNG_tIME;#endif#if defined(PNG_READ_tRNS_SUPPORTED)      PNG_tRNS;#endif#if defined(PNG_READ_zTXt_SUPPORTED)      PNG_zTXt;#endif#endif /* PNG_USE_LOCAL_ARRAYS */   /* First we make sure we have enough data for the 4 byte chunk name    * and the 4 byte chunk length before proceeding with decoding the    * chunk data.  To fully decode each of these chunks, we also make    * sure we have enough data in the buffer for the 4 byte CRC at the    * end of every chunk (except IDAT, which is handled separately).    */   if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))   {      png_byte chunk_length[4];      if (png_ptr->buffer_size < 8)      {         png_push_save_buffer(png_ptr);         return;      }      png_push_fill_buffer(png_ptr, chunk_length, 4);      png_ptr->push_length = png_get_uint_32(chunk_length);      png_reset_crc(png_ptr);      png_crc_read(png_ptr, png_ptr->chunk_name, 4);      png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;   }   if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length);   }   else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_PLTE(png_ptr, info_ptr, png_ptr->push_length);   }   else if (!png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4))   {      /* If we reach an IDAT chunk, this means we have read all of the       * header chunks, and we can start reading the image (or if this       * is called after the image has been read - we have an error).       */     if (!(png_ptr->mode & PNG_HAVE_IHDR))       png_error(png_ptr, "Missing IHDR before IDAT");     else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&         !(png_ptr->mode & PNG_HAVE_PLTE))       png_error(png_ptr, "Missing PLTE before IDAT");      if (png_ptr->mode & PNG_HAVE_IDAT)      {         if (png_ptr->push_length == 0)            return;         if (png_ptr->mode & PNG_AFTER_IDAT)            png_error(png_ptr, "Too many IDAT's found");      }      png_ptr->idat_size = png_ptr->push_length;      png_ptr->mode |= PNG_HAVE_IDAT;      png_ptr->process_mode = PNG_READ_IDAT_MODE;      png_push_have_info(png_ptr, info_ptr);      png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;      png_ptr->zstream.next_out = png_ptr->row_buf;      return;   }   else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_IEND(png_ptr, info_ptr, png_ptr->push_length);      png_ptr->process_mode = PNG_READ_DONE_MODE;      png_push_have_end(png_ptr, info_ptr);   }#if defined(PNG_READ_gAMA_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_gAMA(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_sBIT_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_sBIT(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_cHRM_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_sRGB_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_sRGB(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_iCCP_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_iCCP, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_iCCP(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_sPLT_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_sPLT, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_sPLT(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_tRNS_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_tRNS(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_bKGD_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_bKGD(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_hIST_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_hIST(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_pHYs_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_pHYs(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_oFFs_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_oFFs(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_pCAL_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_pCAL(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_sCAL_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_sCAL, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_sCAL(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_tIME_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_handle_tIME(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_tEXt_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_push_handle_tEXt(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_zTXt_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_push_handle_zTXt(png_ptr, info_ptr, png_ptr->push_length);   }#endif#if defined(PNG_READ_iTXt_SUPPORTED)   else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);   }#endif   else   {      if (png_ptr->push_length + 4 > png_ptr->buffer_size)      {         png_push_save_buffer(png_ptr);         return;      }      png_push_handle_unknown(png_ptr, info_ptr, png_ptr->push_length);   }   png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;}