Lines Matching refs:png_ptr
30 png_process_data(png_structp png_ptr, png_infop info_ptr, in png_process_data() argument
33 if (png_ptr == NULL || info_ptr == NULL) in png_process_data()
36 png_push_restore_buffer(png_ptr, buffer, buffer_size); in png_process_data()
38 while (png_ptr->buffer_size) in png_process_data()
40 png_process_some_data(png_ptr, info_ptr); in png_process_data()
45 png_process_data_pause(png_structp png_ptr, int save) in png_process_data_pause() argument
47 if (png_ptr != NULL) in png_process_data_pause()
53 png_push_save_buffer(png_ptr); in png_process_data_pause()
57 png_size_t remaining = png_ptr->buffer_size; in png_process_data_pause()
58 png_ptr->buffer_size = 0; in png_process_data_pause()
63 if (png_ptr->save_buffer_size < remaining) in png_process_data_pause()
64 return remaining - png_ptr->save_buffer_size; in png_process_data_pause()
72 png_process_data_skip(png_structp png_ptr) in png_process_data_skip() argument
76 if (png_ptr != NULL && png_ptr->process_mode == PNG_SKIP_MODE && in png_process_data_skip()
77 png_ptr->skip_length > 0) in png_process_data_skip()
82 if (png_ptr->buffer_size != 0) in png_process_data_skip()
83 png_error(png_ptr, in png_process_data_skip()
91 if (png_ptr->save_buffer_size != 0) in png_process_data_skip()
92 png_error(png_ptr, "png_process_data_skip called with saved data"); in png_process_data_skip()
94 remaining = png_ptr->skip_length; in png_process_data_skip()
95 png_ptr->skip_length = 0; in png_process_data_skip()
96 png_ptr->process_mode = PNG_READ_CHUNK_MODE; in png_process_data_skip()
106 png_process_some_data(png_structp png_ptr, png_infop info_ptr) in png_process_some_data() argument
108 if (png_ptr == NULL) in png_process_some_data()
111 switch (png_ptr->process_mode) in png_process_some_data()
115 png_push_read_sig(png_ptr, info_ptr); in png_process_some_data()
121 png_push_read_chunk(png_ptr, info_ptr); in png_process_some_data()
127 png_push_read_IDAT(png_ptr); in png_process_some_data()
133 png_push_crc_finish(png_ptr); in png_process_some_data()
139 png_ptr->buffer_size = 0; in png_process_some_data()
152 png_push_read_sig(png_structp png_ptr, png_infop info_ptr) in png_push_read_sig() argument
154 png_size_t num_checked = png_ptr->sig_bytes, in png_push_read_sig()
157 if (png_ptr->buffer_size < num_to_check) in png_push_read_sig()
159 num_to_check = png_ptr->buffer_size; in png_push_read_sig()
162 png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]), in png_push_read_sig()
164 png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes + num_to_check); in png_push_read_sig()
170 png_error(png_ptr, "Not a PNG file"); in png_push_read_sig()
173 png_error(png_ptr, "PNG file corrupted by ASCII conversion"); in png_push_read_sig()
178 if (png_ptr->sig_bytes >= 8) in png_push_read_sig()
180 png_ptr->process_mode = PNG_READ_CHUNK_MODE; in png_push_read_sig()
186 png_push_read_chunk(png_structp png_ptr, png_infop info_ptr) in png_push_read_chunk() argument
196 if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER)) in png_push_read_chunk()
201 if (png_ptr->buffer_size < 8) in png_push_read_chunk()
203 png_push_save_buffer(png_ptr); in png_push_read_chunk()
207 png_push_fill_buffer(png_ptr, chunk_length, 4); in png_push_read_chunk()
208 png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length); in png_push_read_chunk()
209 png_reset_crc(png_ptr); in png_push_read_chunk()
210 png_crc_read(png_ptr, chunk_tag, 4); in png_push_read_chunk()
211 png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag); in png_push_read_chunk()
212 png_check_chunk_name(png_ptr, png_ptr->chunk_name); in png_push_read_chunk()
213 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; in png_push_read_chunk()
216 chunk_name = png_ptr->chunk_name; in png_push_read_chunk()
226 if (png_ptr->mode & PNG_AFTER_IDAT) in png_push_read_chunk()
227 png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT; in png_push_read_chunk()
232 if (png_ptr->push_length != 13) in png_push_read_chunk()
233 png_error(png_ptr, "Invalid IHDR length"); in png_push_read_chunk()
235 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
237 png_push_save_buffer(png_ptr); in png_push_read_chunk()
241 png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
246 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
248 png_push_save_buffer(png_ptr); in png_push_read_chunk()
252 png_handle_IEND(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
254 png_ptr->process_mode = PNG_READ_DONE_MODE; in png_push_read_chunk()
255 png_push_have_end(png_ptr, info_ptr); in png_push_read_chunk()
259 else if (png_chunk_unknown_handling(png_ptr, chunk_name)) in png_push_read_chunk()
261 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
263 png_push_save_buffer(png_ptr); in png_push_read_chunk()
268 png_ptr->mode |= PNG_HAVE_IDAT; in png_push_read_chunk()
270 png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
273 png_ptr->mode |= PNG_HAVE_PLTE; in png_push_read_chunk()
277 if (!(png_ptr->mode & PNG_HAVE_IHDR)) in png_push_read_chunk()
278 png_error(png_ptr, "Missing IHDR before IDAT"); in png_push_read_chunk()
280 else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && in png_push_read_chunk()
281 !(png_ptr->mode & PNG_HAVE_PLTE)) in png_push_read_chunk()
282 png_error(png_ptr, "Missing PLTE before IDAT"); in png_push_read_chunk()
289 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
291 png_push_save_buffer(png_ptr); in png_push_read_chunk()
294 png_handle_PLTE(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
304 if (!(png_ptr->mode & PNG_HAVE_IHDR)) in png_push_read_chunk()
305 png_error(png_ptr, "Missing IHDR before IDAT"); in png_push_read_chunk()
307 else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE && in png_push_read_chunk()
308 !(png_ptr->mode & PNG_HAVE_PLTE)) in png_push_read_chunk()
309 png_error(png_ptr, "Missing PLTE before IDAT"); in png_push_read_chunk()
311 if (png_ptr->mode & PNG_HAVE_IDAT) in png_push_read_chunk()
313 if (!(png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT)) in png_push_read_chunk()
314 if (png_ptr->push_length == 0) in png_push_read_chunk()
317 if (png_ptr->mode & PNG_AFTER_IDAT) in png_push_read_chunk()
318 png_benign_error(png_ptr, "Too many IDATs found"); in png_push_read_chunk()
321 png_ptr->idat_size = png_ptr->push_length; in png_push_read_chunk()
322 png_ptr->mode |= PNG_HAVE_IDAT; in png_push_read_chunk()
323 png_ptr->process_mode = PNG_READ_IDAT_MODE; in png_push_read_chunk()
324 png_push_have_info(png_ptr, info_ptr); in png_push_read_chunk()
325 png_ptr->zstream.avail_out = in png_push_read_chunk()
326 (uInt) PNG_ROWBYTES(png_ptr->pixel_depth, in png_push_read_chunk()
327 png_ptr->iwidth) + 1; in png_push_read_chunk()
328 png_ptr->zstream.next_out = png_ptr->row_buf; in png_push_read_chunk()
333 else if (png_ptr->chunk_name == png_gAMA) in png_push_read_chunk()
335 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
337 png_push_save_buffer(png_ptr); in png_push_read_chunk()
341 png_handle_gAMA(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
346 else if (png_ptr->chunk_name == png_sBIT) in png_push_read_chunk()
348 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
350 png_push_save_buffer(png_ptr); in png_push_read_chunk()
354 png_handle_sBIT(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
359 else if (png_ptr->chunk_name == png_cHRM) in png_push_read_chunk()
361 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
363 png_push_save_buffer(png_ptr); in png_push_read_chunk()
367 png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
374 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
376 png_push_save_buffer(png_ptr); in png_push_read_chunk()
380 png_handle_sRGB(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
385 else if (png_ptr->chunk_name == png_iCCP) in png_push_read_chunk()
387 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
389 png_push_save_buffer(png_ptr); in png_push_read_chunk()
393 png_handle_iCCP(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
400 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
402 png_push_save_buffer(png_ptr); in png_push_read_chunk()
406 png_handle_sPLT(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
413 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
415 png_push_save_buffer(png_ptr); in png_push_read_chunk()
419 png_handle_tRNS(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
426 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
428 png_push_save_buffer(png_ptr); in png_push_read_chunk()
432 png_handle_bKGD(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
439 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
441 png_push_save_buffer(png_ptr); in png_push_read_chunk()
445 png_handle_hIST(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
452 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
454 png_push_save_buffer(png_ptr); in png_push_read_chunk()
458 png_handle_pHYs(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
465 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
467 png_push_save_buffer(png_ptr); in png_push_read_chunk()
471 png_handle_oFFs(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
478 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
480 png_push_save_buffer(png_ptr); in png_push_read_chunk()
484 png_handle_pCAL(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
491 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
493 png_push_save_buffer(png_ptr); in png_push_read_chunk()
497 png_handle_sCAL(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
504 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
506 png_push_save_buffer(png_ptr); in png_push_read_chunk()
510 png_handle_tIME(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
517 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
519 png_push_save_buffer(png_ptr); in png_push_read_chunk()
523 png_handle_tEXt(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
530 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
532 png_push_save_buffer(png_ptr); in png_push_read_chunk()
536 png_handle_zTXt(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
543 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
545 png_push_save_buffer(png_ptr); in png_push_read_chunk()
549 png_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
556 if (png_ptr->push_length + 4 > png_ptr->buffer_size) in png_push_read_chunk()
558 png_push_save_buffer(png_ptr); in png_push_read_chunk()
561 png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length); in png_push_read_chunk()
564 png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; in png_push_read_chunk()
568 png_push_crc_skip(png_structp png_ptr, png_uint_32 skip) in png_push_crc_skip() argument
570 png_ptr->process_mode = PNG_SKIP_MODE; in png_push_crc_skip()
571 png_ptr->skip_length = skip; in png_push_crc_skip()
575 png_push_crc_finish(png_structp png_ptr) in png_push_crc_finish() argument
577 if (png_ptr->skip_length && png_ptr->save_buffer_size) in png_push_crc_finish()
579 png_size_t save_size = png_ptr->save_buffer_size; in png_push_crc_finish()
580 png_uint_32 skip_length = png_ptr->skip_length; in png_push_crc_finish()
594 png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); in png_push_crc_finish()
596 png_ptr->skip_length -= skip_length; in png_push_crc_finish()
597 png_ptr->buffer_size -= save_size; in png_push_crc_finish()
598 png_ptr->save_buffer_size -= save_size; in png_push_crc_finish()
599 png_ptr->save_buffer_ptr += save_size; in png_push_crc_finish()
602 if (png_ptr->skip_length && png_ptr->current_buffer_size) in png_push_crc_finish()
604 png_size_t save_size = png_ptr->current_buffer_size; in png_push_crc_finish()
605 png_uint_32 skip_length = png_ptr->skip_length; in png_push_crc_finish()
616 png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); in png_push_crc_finish()
618 png_ptr->skip_length -= skip_length; in png_push_crc_finish()
619 png_ptr->buffer_size -= save_size; in png_push_crc_finish()
620 png_ptr->current_buffer_size -= save_size; in png_push_crc_finish()
621 png_ptr->current_buffer_ptr += save_size; in png_push_crc_finish()
624 if (!png_ptr->skip_length) in png_push_crc_finish()
626 if (png_ptr->buffer_size < 4) in png_push_crc_finish()
628 png_push_save_buffer(png_ptr); in png_push_crc_finish()
632 png_crc_finish(png_ptr, 0); in png_push_crc_finish()
633 png_ptr->process_mode = PNG_READ_CHUNK_MODE; in png_push_crc_finish()
638 png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length) in png_push_fill_buffer() argument
642 if (png_ptr == NULL) in png_push_fill_buffer()
647 if (png_ptr->save_buffer_size) in png_push_fill_buffer()
651 if (length < png_ptr->save_buffer_size) in png_push_fill_buffer()
655 save_size = png_ptr->save_buffer_size; in png_push_fill_buffer()
657 png_memcpy(ptr, png_ptr->save_buffer_ptr, save_size); in png_push_fill_buffer()
660 png_ptr->buffer_size -= save_size; in png_push_fill_buffer()
661 png_ptr->save_buffer_size -= save_size; in png_push_fill_buffer()
662 png_ptr->save_buffer_ptr += save_size; in png_push_fill_buffer()
665 if (length && png_ptr->current_buffer_size) in png_push_fill_buffer()
669 if (length < png_ptr->current_buffer_size) in png_push_fill_buffer()
673 save_size = png_ptr->current_buffer_size; in png_push_fill_buffer()
675 png_memcpy(ptr, png_ptr->current_buffer_ptr, save_size); in png_push_fill_buffer()
676 png_ptr->buffer_size -= save_size; in png_push_fill_buffer()
677 png_ptr->current_buffer_size -= save_size; in png_push_fill_buffer()
678 png_ptr->current_buffer_ptr += save_size; in png_push_fill_buffer()
683 png_push_save_buffer(png_structp png_ptr) in png_push_save_buffer() argument
685 if (png_ptr->save_buffer_size) in png_push_save_buffer()
687 if (png_ptr->save_buffer_ptr != png_ptr->save_buffer) in png_push_save_buffer()
693 istop = png_ptr->save_buffer_size; in png_push_save_buffer()
695 for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer; in png_push_save_buffer()
703 if (png_ptr->save_buffer_size + png_ptr->current_buffer_size > in png_push_save_buffer()
704 png_ptr->save_buffer_max) in png_push_save_buffer()
709 if (png_ptr->save_buffer_size > PNG_SIZE_MAX - in png_push_save_buffer()
710 (png_ptr->current_buffer_size + 256)) in png_push_save_buffer()
712 png_error(png_ptr, "Potential overflow of save_buffer"); in png_push_save_buffer()
715 new_max = png_ptr->save_buffer_size + png_ptr->current_buffer_size + 256; in png_push_save_buffer()
716 old_buffer = png_ptr->save_buffer; in png_push_save_buffer()
717 png_ptr->save_buffer = (png_bytep)png_malloc_warn(png_ptr, new_max); in png_push_save_buffer()
719 if (png_ptr->save_buffer == NULL) in png_push_save_buffer()
721 png_free(png_ptr, old_buffer); in png_push_save_buffer()
722 png_error(png_ptr, "Insufficient memory for save_buffer"); in png_push_save_buffer()
725 png_memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size); in png_push_save_buffer()
726 png_free(png_ptr, old_buffer); in png_push_save_buffer()
727 png_ptr->save_buffer_max = new_max; in png_push_save_buffer()
730 if (png_ptr->current_buffer_size) in png_push_save_buffer()
732 png_memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size, in png_push_save_buffer()
733 png_ptr->current_buffer_ptr, png_ptr->current_buffer_size); in png_push_save_buffer()
734 png_ptr->save_buffer_size += png_ptr->current_buffer_size; in png_push_save_buffer()
735 png_ptr->current_buffer_size = 0; in png_push_save_buffer()
738 png_ptr->save_buffer_ptr = png_ptr->save_buffer; in png_push_save_buffer()
739 png_ptr->buffer_size = 0; in png_push_save_buffer()
743 png_push_restore_buffer(png_structp png_ptr, png_bytep buffer, in png_push_restore_buffer() argument
746 png_ptr->current_buffer = buffer; in png_push_restore_buffer()
747 png_ptr->current_buffer_size = buffer_length; in png_push_restore_buffer()
748 png_ptr->buffer_size = buffer_length + png_ptr->save_buffer_size; in png_push_restore_buffer()
749 png_ptr->current_buffer_ptr = png_ptr->current_buffer; in png_push_restore_buffer()
753 png_push_read_IDAT(png_structp png_ptr) in png_push_read_IDAT() argument
755 if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER)) in png_push_read_IDAT()
761 if (png_ptr->buffer_size < 8) in png_push_read_IDAT()
763 png_push_save_buffer(png_ptr); in png_push_read_IDAT()
767 png_push_fill_buffer(png_ptr, chunk_length, 4); in png_push_read_IDAT()
768 png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length); in png_push_read_IDAT()
769 png_reset_crc(png_ptr); in png_push_read_IDAT()
770 png_crc_read(png_ptr, chunk_tag, 4); in png_push_read_IDAT()
771 png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag); in png_push_read_IDAT()
772 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; in png_push_read_IDAT()
774 if (png_ptr->chunk_name != png_IDAT) in png_push_read_IDAT()
776 png_ptr->process_mode = PNG_READ_CHUNK_MODE; in png_push_read_IDAT()
778 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) in png_push_read_IDAT()
779 png_error(png_ptr, "Not enough compressed data"); in png_push_read_IDAT()
784 png_ptr->idat_size = png_ptr->push_length; in png_push_read_IDAT()
787 if (png_ptr->idat_size && png_ptr->save_buffer_size) in png_push_read_IDAT()
789 png_size_t save_size = png_ptr->save_buffer_size; in png_push_read_IDAT()
790 png_uint_32 idat_size = png_ptr->idat_size; in png_push_read_IDAT()
804 png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); in png_push_read_IDAT()
806 png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size); in png_push_read_IDAT()
808 png_ptr->idat_size -= idat_size; in png_push_read_IDAT()
809 png_ptr->buffer_size -= save_size; in png_push_read_IDAT()
810 png_ptr->save_buffer_size -= save_size; in png_push_read_IDAT()
811 png_ptr->save_buffer_ptr += save_size; in png_push_read_IDAT()
814 if (png_ptr->idat_size && png_ptr->current_buffer_size) in png_push_read_IDAT()
816 png_size_t save_size = png_ptr->current_buffer_size; in png_push_read_IDAT()
817 png_uint_32 idat_size = png_ptr->idat_size; in png_push_read_IDAT()
830 png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); in png_push_read_IDAT()
832 png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size); in png_push_read_IDAT()
834 png_ptr->idat_size -= idat_size; in png_push_read_IDAT()
835 png_ptr->buffer_size -= save_size; in png_push_read_IDAT()
836 png_ptr->current_buffer_size -= save_size; in png_push_read_IDAT()
837 png_ptr->current_buffer_ptr += save_size; in png_push_read_IDAT()
840 if (!png_ptr->idat_size) in png_push_read_IDAT()
842 if (png_ptr->buffer_size < 4) in png_push_read_IDAT()
844 png_push_save_buffer(png_ptr); in png_push_read_IDAT()
848 png_crc_finish(png_ptr, 0); in png_push_read_IDAT()
849 png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; in png_push_read_IDAT()
850 png_ptr->mode |= PNG_AFTER_IDAT; in png_push_read_IDAT()
855 png_process_IDAT_data(png_structp png_ptr, png_bytep buffer, in png_process_IDAT_data() argument
860 png_error(png_ptr, "No IDAT data (internal error)"); in png_process_IDAT_data()
866 png_ptr->zstream.next_in = buffer; in png_process_IDAT_data()
867 png_ptr->zstream.avail_in = (uInt)buffer_length; in png_process_IDAT_data()
872 while (png_ptr->zstream.avail_in > 0 && in png_process_IDAT_data()
873 !(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) in png_process_IDAT_data()
882 if (!(png_ptr->zstream.avail_out > 0)) in png_process_IDAT_data()
884 png_ptr->zstream.avail_out = in png_process_IDAT_data()
885 (uInt) PNG_ROWBYTES(png_ptr->pixel_depth, in png_process_IDAT_data()
886 png_ptr->iwidth) + 1; in png_process_IDAT_data()
888 png_ptr->zstream.next_out = png_ptr->row_buf; in png_process_IDAT_data()
898 ret = inflate(&png_ptr->zstream, Z_SYNC_FLUSH); in png_process_IDAT_data()
904 png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; in png_process_IDAT_data()
909 if (png_ptr->row_number >= png_ptr->num_rows || in png_process_IDAT_data()
910 png_ptr->pass > 6) in png_process_IDAT_data()
911 png_warning(png_ptr, "Truncated compressed data in IDAT"); in png_process_IDAT_data()
914 png_error(png_ptr, "Decompression error in IDAT"); in png_process_IDAT_data()
921 if (png_ptr->zstream.next_out != png_ptr->row_buf) in png_process_IDAT_data()
927 if (png_ptr->row_number >= png_ptr->num_rows || in png_process_IDAT_data()
928 png_ptr->pass > 6) in png_process_IDAT_data()
931 png_warning(png_ptr, "Extra compressed data in IDAT"); in png_process_IDAT_data()
932 png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; in png_process_IDAT_data()
941 if (png_ptr->zstream.avail_out == 0) in png_process_IDAT_data()
942 png_push_process_row(png_ptr); in png_process_IDAT_data()
947 png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED; in png_process_IDAT_data()
954 if (png_ptr->zstream.avail_in > 0) in png_process_IDAT_data()
955 png_warning(png_ptr, "Extra compression data in IDAT"); in png_process_IDAT_data()
959 png_push_process_row(png_structp png_ptr) in png_push_process_row() argument
964 row_info.width = png_ptr->iwidth; /* NOTE: width of current interlaced row */ in png_push_process_row()
965 row_info.color_type = png_ptr->color_type; in png_push_process_row()
966 row_info.bit_depth = png_ptr->bit_depth; in png_push_process_row()
967 row_info.channels = png_ptr->channels; in png_push_process_row()
968 row_info.pixel_depth = png_ptr->pixel_depth; in png_push_process_row()
971 if (png_ptr->row_buf[0] > PNG_FILTER_VALUE_NONE) in png_push_process_row()
973 if (png_ptr->row_buf[0] < PNG_FILTER_VALUE_LAST) in png_push_process_row()
974 png_read_filter_row(png_ptr, &row_info, png_ptr->row_buf + 1, in png_push_process_row()
975 png_ptr->prev_row + 1, png_ptr->row_buf[0]); in png_push_process_row()
977 png_error(png_ptr, "bad adaptive filter value"); in png_push_process_row()
985 png_memcpy(png_ptr->prev_row, png_ptr->row_buf, row_info.rowbytes + 1); in png_push_process_row()
988 if (png_ptr->transformations) in png_push_process_row()
989 png_do_read_transformations(png_ptr, &row_info); in png_push_process_row()
993 if (png_ptr->transformed_pixel_depth == 0) in png_push_process_row()
995 png_ptr->transformed_pixel_depth = row_info.pixel_depth; in png_push_process_row()
996 if (row_info.pixel_depth > png_ptr->maximum_pixel_depth) in png_push_process_row()
997 png_error(png_ptr, "progressive row overflow"); in png_push_process_row()
1000 else if (png_ptr->transformed_pixel_depth != row_info.pixel_depth) in png_push_process_row()
1001 png_error(png_ptr, "internal progressive row size calculation error"); in png_push_process_row()
1006 if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) in png_push_process_row()
1008 if (png_ptr->pass < 6) in png_push_process_row()
1009 png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass, in png_push_process_row()
1010 png_ptr->transformations); in png_push_process_row()
1012 switch (png_ptr->pass) in png_push_process_row()
1017 for (i = 0; i < 8 && png_ptr->pass == 0; i++) in png_push_process_row()
1019 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1020 png_read_push_finish_row(png_ptr); /* Updates png_ptr->pass */ in png_push_process_row()
1023 if (png_ptr->pass == 2) /* Pass 1 might be empty */ in png_push_process_row()
1025 for (i = 0; i < 4 && png_ptr->pass == 2; i++) in png_push_process_row()
1027 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1028 png_read_push_finish_row(png_ptr); in png_push_process_row()
1032 if (png_ptr->pass == 4 && png_ptr->height <= 4) in png_push_process_row()
1034 for (i = 0; i < 2 && png_ptr->pass == 4; i++) in png_push_process_row()
1036 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1037 png_read_push_finish_row(png_ptr); in png_push_process_row()
1041 if (png_ptr->pass == 6 && png_ptr->height <= 4) in png_push_process_row()
1043 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1044 png_read_push_finish_row(png_ptr); in png_push_process_row()
1053 for (i = 0; i < 8 && png_ptr->pass == 1; i++) in png_push_process_row()
1055 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1056 png_read_push_finish_row(png_ptr); in png_push_process_row()
1059 if (png_ptr->pass == 2) /* Skip top 4 generated rows */ in png_push_process_row()
1061 for (i = 0; i < 4 && png_ptr->pass == 2; i++) in png_push_process_row()
1063 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1064 png_read_push_finish_row(png_ptr); in png_push_process_row()
1075 for (i = 0; i < 4 && png_ptr->pass == 2; i++) in png_push_process_row()
1077 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1078 png_read_push_finish_row(png_ptr); in png_push_process_row()
1081 for (i = 0; i < 4 && png_ptr->pass == 2; i++) in png_push_process_row()
1083 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1084 png_read_push_finish_row(png_ptr); in png_push_process_row()
1087 if (png_ptr->pass == 4) /* Pass 3 might be empty */ in png_push_process_row()
1089 for (i = 0; i < 2 && png_ptr->pass == 4; i++) in png_push_process_row()
1091 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1092 png_read_push_finish_row(png_ptr); in png_push_process_row()
1103 for (i = 0; i < 4 && png_ptr->pass == 3; i++) in png_push_process_row()
1105 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1106 png_read_push_finish_row(png_ptr); in png_push_process_row()
1109 if (png_ptr->pass == 4) /* Skip top two generated rows */ in png_push_process_row()
1111 for (i = 0; i < 2 && png_ptr->pass == 4; i++) in png_push_process_row()
1113 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1114 png_read_push_finish_row(png_ptr); in png_push_process_row()
1125 for (i = 0; i < 2 && png_ptr->pass == 4; i++) in png_push_process_row()
1127 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1128 png_read_push_finish_row(png_ptr); in png_push_process_row()
1131 for (i = 0; i < 2 && png_ptr->pass == 4; i++) in png_push_process_row()
1133 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1134 png_read_push_finish_row(png_ptr); in png_push_process_row()
1137 if (png_ptr->pass == 6) /* Pass 5 might be empty */ in png_push_process_row()
1139 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1140 png_read_push_finish_row(png_ptr); in png_push_process_row()
1150 for (i = 0; i < 2 && png_ptr->pass == 5; i++) in png_push_process_row()
1152 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1153 png_read_push_finish_row(png_ptr); in png_push_process_row()
1156 if (png_ptr->pass == 6) /* Skip top generated row */ in png_push_process_row()
1158 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1159 png_read_push_finish_row(png_ptr); in png_push_process_row()
1168 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1169 png_read_push_finish_row(png_ptr); in png_push_process_row()
1171 if (png_ptr->pass != 6) in png_push_process_row()
1174 png_push_have_row(png_ptr, NULL); in png_push_process_row()
1175 png_read_push_finish_row(png_ptr); in png_push_process_row()
1182 png_push_have_row(png_ptr, png_ptr->row_buf + 1); in png_push_process_row()
1183 png_read_push_finish_row(png_ptr); in png_push_process_row()
1188 png_read_push_finish_row(png_structp png_ptr) in png_read_push_finish_row() argument
1211 png_ptr->row_number++; in png_read_push_finish_row()
1212 if (png_ptr->row_number < png_ptr->num_rows) in png_read_push_finish_row()
1216 if (png_ptr->interlaced) in png_read_push_finish_row()
1218 png_ptr->row_number = 0; in png_read_push_finish_row()
1219 png_memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1); in png_read_push_finish_row()
1223 png_ptr->pass++; in png_read_push_finish_row()
1224 if ((png_ptr->pass == 1 && png_ptr->width < 5) || in png_read_push_finish_row()
1225 (png_ptr->pass == 3 && png_ptr->width < 3) || in png_read_push_finish_row()
1226 (png_ptr->pass == 5 && png_ptr->width < 2)) in png_read_push_finish_row()
1227 png_ptr->pass++; in png_read_push_finish_row()
1229 if (png_ptr->pass > 7) in png_read_push_finish_row()
1230 png_ptr->pass--; in png_read_push_finish_row()
1232 if (png_ptr->pass >= 7) in png_read_push_finish_row()
1235 png_ptr->iwidth = (png_ptr->width + in png_read_push_finish_row()
1236 png_pass_inc[png_ptr->pass] - 1 - in png_read_push_finish_row()
1237 png_pass_start[png_ptr->pass]) / in png_read_push_finish_row()
1238 png_pass_inc[png_ptr->pass]; in png_read_push_finish_row()
1240 if (png_ptr->transformations & PNG_INTERLACE) in png_read_push_finish_row()
1243 png_ptr->num_rows = (png_ptr->height + in png_read_push_finish_row()
1244 png_pass_yinc[png_ptr->pass] - 1 - in png_read_push_finish_row()
1245 png_pass_ystart[png_ptr->pass]) / in png_read_push_finish_row()
1246 png_pass_yinc[png_ptr->pass]; in png_read_push_finish_row()
1248 } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0); in png_read_push_finish_row()
1254 png_push_have_info(png_structp png_ptr, png_infop info_ptr) in png_push_have_info() argument
1256 if (png_ptr->info_fn != NULL) in png_push_have_info()
1257 (*(png_ptr->info_fn))(png_ptr, info_ptr); in png_push_have_info()
1261 png_push_have_end(png_structp png_ptr, png_infop info_ptr) in png_push_have_end() argument
1263 if (png_ptr->end_fn != NULL) in png_push_have_end()
1264 (*(png_ptr->end_fn))(png_ptr, info_ptr); in png_push_have_end()
1268 png_push_have_row(png_structp png_ptr, png_bytep row) in png_push_have_row() argument
1270 if (png_ptr->row_fn != NULL) in png_push_have_row()
1271 (*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number, in png_push_have_row()
1272 (int)png_ptr->pass); in png_push_have_row()
1277 png_progressive_combine_row (png_structp png_ptr, png_bytep old_row, in png_progressive_combine_row() argument
1280 if (png_ptr == NULL) in png_progressive_combine_row()
1288 png_combine_row(png_ptr, old_row, 1/*display*/); in png_progressive_combine_row()
1293 png_set_progressive_read_fn(png_structp png_ptr, png_voidp progressive_ptr, in png_set_progressive_read_fn() argument
1297 if (png_ptr == NULL) in png_set_progressive_read_fn()
1300 png_ptr->info_fn = info_fn; in png_set_progressive_read_fn()
1301 png_ptr->row_fn = row_fn; in png_set_progressive_read_fn()
1302 png_ptr->end_fn = end_fn; in png_set_progressive_read_fn()
1304 png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer); in png_set_progressive_read_fn()
1308 png_get_progressive_ptr(png_const_structp png_ptr) in png_get_progressive_ptr() argument
1310 if (png_ptr == NULL) in png_get_progressive_ptr()
1313 return png_ptr->io_ptr; in png_get_progressive_ptr()