15#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
18#define PNG_READ_SIG_MODE 0
19#define PNG_READ_CHUNK_MODE 1
20#define PNG_READ_IDAT_MODE 2
21#define PNG_READ_tEXt_MODE 4
22#define PNG_READ_zTXt_MODE 5
23#define PNG_READ_DONE_MODE 6
24#define PNG_READ_iTXt_MODE 7
25#define PNG_ERROR_MODE 8
27#define PNG_PUSH_SAVE_BUFFER_IF_FULL \
28if (png_ptr->push_length + 4 > png_ptr->buffer_size) \
29 { png_push_save_buffer(png_ptr); return; }
30#define PNG_PUSH_SAVE_BUFFER_IF_LT(N) \
31if (png_ptr->buffer_size < N) \
32 { png_push_save_buffer(png_ptr); return; }
34#ifdef PNG_READ_INTERLACING_SUPPORTED
38static const png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
40static const png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
42static const png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
44static const png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
77 size_t remaining =
png_ptr->buffer_size;
83 if (
png_ptr->save_buffer_size < remaining)
84 return remaining -
png_ptr->save_buffer_size;
100"png_process_data_skip is not implemented in any current version of libpng");
115 case PNG_READ_SIG_MODE:
121 case PNG_READ_CHUNK_MODE:
127 case PNG_READ_IDAT_MODE:
150 size_t num_checked =
png_ptr->sig_bytes;
151 size_t num_to_check = 8 - num_checked;
153 if (
png_ptr->buffer_size < num_to_check)
155 num_to_check =
png_ptr->buffer_size;
160 png_ptr->sig_bytes = (png_byte)(
png_ptr->sig_bytes + num_to_check);
162 if (png_sig_cmp(
info_ptr->signature, num_checked, num_to_check) != 0)
164 if (num_checked < 4 &&
165 png_sig_cmp(
info_ptr->signature, num_checked, num_to_check - 4) != 0)
166 png_error(
png_ptr,
"Not a PNG file");
169 png_error(
png_ptr,
"PNG file corrupted by ASCII conversion");
175 png_ptr->process_mode = PNG_READ_CHUNK_MODE;
184#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
196 PNG_PUSH_SAVE_BUFFER_IF_LT(8)
201 chunk_name =
png_ptr->chunk_name;
213 png_error(
png_ptr,
"Missing IHDR before IDAT");
217 png_error(
png_ptr,
"Missing PLTE before IDAT");
219 png_ptr->process_mode = PNG_READ_IDAT_MODE;
229 png_benign_error(
png_ptr,
"Too many IDATs found");
242 if (
png_ptr->push_length != 13)
243 png_error(
png_ptr,
"Invalid IHDR length");
245 PNG_PUSH_SAVE_BUFFER_IF_FULL
251 PNG_PUSH_SAVE_BUFFER_IF_FULL
254 png_ptr->process_mode = PNG_READ_DONE_MODE;
258#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
259 else if ((keep = png_chunk_unknown_handling(
png_ptr, chunk_name)) != 0)
261 PNG_PUSH_SAVE_BUFFER_IF_FULL
272 png_ptr->process_mode = PNG_READ_IDAT_MODE;
283 PNG_PUSH_SAVE_BUFFER_IF_FULL
287 png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
299 if (
png_ptr->save_buffer_size != 0)
303 if (length < png_ptr->save_buffer_size)
307 save_size =
png_ptr->save_buffer_size;
312 png_ptr->buffer_size -= save_size;
313 png_ptr->save_buffer_size -= save_size;
314 png_ptr->save_buffer_ptr += save_size;
320 if (length < png_ptr->current_buffer_size)
324 save_size =
png_ptr->current_buffer_size;
327 png_ptr->buffer_size -= save_size;
328 png_ptr->current_buffer_size -= save_size;
329 png_ptr->current_buffer_ptr += save_size;
336 if (
png_ptr->save_buffer_size != 0)
344 istop =
png_ptr->save_buffer_size;
346 i < istop;
i++,
sp++, dp++)
359 (
png_ptr->current_buffer_size + 256))
361 png_error(
png_ptr,
"Potential overflow of save_buffer");
364 new_max =
png_ptr->save_buffer_size +
png_ptr->current_buffer_size + 256;
365 old_buffer =
png_ptr->save_buffer;
372 png_error(
png_ptr,
"Insufficient memory for save_buffer");
377 else if (
png_ptr->save_buffer_size)
378 png_error(
png_ptr,
"save_buffer error");
380 png_ptr->save_buffer_max = new_max;
382 if (
png_ptr->current_buffer_size)
387 png_ptr->current_buffer_size = 0;
395 size_t buffer_length)
398 png_ptr->current_buffer_size = buffer_length;
408 png_byte chunk_length[4];
409 png_byte chunk_tag[4];
412 PNG_PUSH_SAVE_BUFFER_IF_LT(8)
413 png_push_fill_buffer(
png_ptr, chunk_length, 4);
416 png_crc_read(
png_ptr, chunk_tag, 4);
422 png_ptr->process_mode = PNG_READ_CHUNK_MODE;
425 png_error(
png_ptr,
"Not enough compressed data");
435 size_t save_size =
png_ptr->save_buffer_size;
444 if (idat_size < save_size)
445 save_size = (
size_t)idat_size;
452 png_process_IDAT_data(
png_ptr,
png_ptr->save_buffer_ptr, save_size);
454 png_ptr->idat_size -= idat_size;
455 png_ptr->buffer_size -= save_size;
456 png_ptr->save_buffer_size -= save_size;
457 png_ptr->save_buffer_ptr += save_size;
462 size_t save_size =
png_ptr->current_buffer_size;
470 if (idat_size < save_size)
471 save_size = (
size_t)idat_size;
476 png_calculate_crc(
png_ptr,
png_ptr->current_buffer_ptr, save_size);
478 png_process_IDAT_data(
png_ptr,
png_ptr->current_buffer_ptr, save_size);
480 png_ptr->idat_size -= idat_size;
481 png_ptr->buffer_size -= save_size;
482 png_ptr->current_buffer_size -= save_size;
483 png_ptr->current_buffer_ptr += save_size;
488 PNG_PUSH_SAVE_BUFFER_IF_LT(4)
498 size_t buffer_length)
502 png_error(
png_ptr,
"No IDAT data (internal error)");
515 while (
png_ptr->zstream.avail_in > 0 &&
525 if (!(
png_ptr->zstream.avail_out > 0))
555 png_warning(
png_ptr,
"Truncated compressed data in IDAT");
560 png_benign_error(
png_ptr,
"IDAT: ADLER32 checksum mismatch");
562 png_error(
png_ptr,
"Decompression error in IDAT");
580 png_warning(
png_ptr,
"Extra compressed data in IDAT");
591 if (
png_ptr->zstream.avail_out == 0)
604 if (
png_ptr->zstream.avail_in > 0)
605 png_warning(
png_ptr,
"Extra compression data in IDAT");
627 png_error(
png_ptr,
"bad adaptive filter value");
637#ifdef PNG_READ_TRANSFORMS_SUPPORTED
638 if (
png_ptr->transformations != 0)
639 png_do_read_transformations(
png_ptr, &row_info);
643 if (
png_ptr->transformed_pixel_depth == 0)
647 png_error(
png_ptr,
"progressive row overflow");
651 png_error(
png_ptr,
"internal progressive row size calculation error");
654#ifdef PNG_READ_INTERLACING_SUPPORTED
656 if (
png_ptr->interlaced != 0 &&
660 png_do_read_interlace(&row_info,
png_ptr->row_buf + 1,
png_ptr->pass,
671 png_read_push_finish_row(
png_ptr);
679 png_read_push_finish_row(
png_ptr);
688 png_read_push_finish_row(
png_ptr);
695 png_read_push_finish_row(
png_ptr);
707 png_read_push_finish_row(
png_ptr);
715 png_read_push_finish_row(
png_ptr);
729 png_read_push_finish_row(
png_ptr);
735 png_read_push_finish_row(
png_ptr);
743 png_read_push_finish_row(
png_ptr);
757 png_read_push_finish_row(
png_ptr);
765 png_read_push_finish_row(
png_ptr);
779 png_read_push_finish_row(
png_ptr);
785 png_read_push_finish_row(
png_ptr);
791 png_read_push_finish_row(
png_ptr);
804 png_read_push_finish_row(
png_ptr);
810 png_read_push_finish_row(
png_ptr);
820 png_read_push_finish_row(
png_ptr);
826 png_read_push_finish_row(
png_ptr);
834 png_read_push_finish_row(
png_ptr);
845#ifdef PNG_READ_INTERLACING_SUPPORTED
866 png_pass_inc[
png_ptr->pass] - 1 -
867 png_pass_start[
png_ptr->pass]) /
874 png_pass_yinc[
png_ptr->pass] - 1 -
875 png_pass_ystart[
png_ptr->pass]) /
905#ifdef PNG_READ_INTERLACING_SUPPORTED
918 png_combine_row(
png_ptr, old_row, 1);
924 png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
925 png_progressive_end_ptr end_fn)
934 png_set_read_fn(
png_ptr, progressive_ptr, png_push_fill_buffer);
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
#define PNG_COLOR_TYPE_PALETTE
#define PNG_FILTER_VALUE_LAST
const png_struct *PNG_RESTRICT png_const_structrp
#define PNG_FILTER_VALUE_NONE
png_info *PNG_RESTRICT png_inforp
png_struct *PNG_RESTRICT png_structrp
png_const_structrp png_const_inforp info_ptr
const png_byte * png_const_bytep
#define PNG_ROWBYTES(pixel_bits, width)
#define PNG_HAVE_CHUNK_HEADER
#define png_app_warning(pp, s)
#define PNG_INFLATE(pp, flush)
#define PNG_HAVE_CHUNK_AFTER_IDAT
#define PNG_CHUNK_FROM_STRING(s)
#define PNG_FLAG_ZSTREAM_ENDED
wchar_t const *const size_t const buffer_size