Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Side by Side Diff: third_party/libpng/pngpread.c

Issue 15041: Update libpng to 1.2.33. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 12 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/libpng/pngmem.c ('k') | third_party/libpng/pngread.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* pngpread.c - read a png file in push mode 2 /* pngpread.c - read a png file in push mode
3 * 3 *
4 * Last changed in libpng 1.2.27 [April 29, 2008] 4 * Last changed in libpng 1.2.32 [September 18, 2008]
5 * For conditions of distribution and use, see copyright notice in png.h 5 * For conditions of distribution and use, see copyright notice in png.h
6 * Copyright (c) 1998-2008 Glenn Randers-Pehrson 6 * Copyright (c) 1998-2008 Glenn Randers-Pehrson
7 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 7 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
8 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 8 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
9 */ 9 */
10 10
11 #define PNG_INTERNAL 11 #define PNG_INTERNAL
12 #include "png.h" 12 #include "png.h"
13
14 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 13 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
15 14
16 /* push model modes */ 15 /* push model modes */
17 #define PNG_READ_SIG_MODE 0 16 #define PNG_READ_SIG_MODE 0
18 #define PNG_READ_CHUNK_MODE 1 17 #define PNG_READ_CHUNK_MODE 1
19 #define PNG_READ_IDAT_MODE 2 18 #define PNG_READ_IDAT_MODE 2
20 #define PNG_SKIP_MODE 3 19 #define PNG_SKIP_MODE 3
21 #define PNG_READ_tEXt_MODE 4 20 #define PNG_READ_tEXt_MODE 4
22 #define PNG_READ_zTXt_MODE 5 21 #define PNG_READ_zTXt_MODE 5
23 #define PNG_READ_DONE_MODE 6 22 #define PNG_READ_DONE_MODE 6
24 #define PNG_READ_iTXt_MODE 7 23 #define PNG_READ_iTXt_MODE 7
25 #define PNG_ERROR_MODE 8 24 #define PNG_ERROR_MODE 8
26 25
27 void PNGAPI 26 void PNGAPI
28 png_process_data(png_structp png_ptr, png_infop info_ptr, 27 png_process_data(png_structp png_ptr, png_infop info_ptr,
29 png_bytep buffer, png_size_t buffer_size) 28 png_bytep buffer, png_size_t buffer_size)
30 { 29 {
31 if(png_ptr == NULL || info_ptr == NULL) return; 30 if (png_ptr == NULL || info_ptr == NULL) return;
32 png_push_restore_buffer(png_ptr, buffer, buffer_size); 31 png_push_restore_buffer(png_ptr, buffer, buffer_size);
33 32
34 while (png_ptr->buffer_size) 33 while (png_ptr->buffer_size)
35 { 34 {
36 png_process_some_data(png_ptr, info_ptr); 35 png_process_some_data(png_ptr, info_ptr);
37 } 36 }
38 } 37 }
39 38
40 /* What we do with the incoming data depends on what we were previously 39 /* What we do with the incoming data depends on what we were previously
41 * doing before we ran out of data... 40 * doing before we ran out of data...
42 */ 41 */
43 void /* PRIVATE */ 42 void /* PRIVATE */
44 png_process_some_data(png_structp png_ptr, png_infop info_ptr) 43 png_process_some_data(png_structp png_ptr, png_infop info_ptr)
45 { 44 {
46 if(png_ptr == NULL) return; 45 if (png_ptr == NULL) return;
47 switch (png_ptr->process_mode) 46 switch (png_ptr->process_mode)
48 { 47 {
49 case PNG_READ_SIG_MODE: 48 case PNG_READ_SIG_MODE:
50 { 49 {
51 png_push_read_sig(png_ptr, info_ptr); 50 png_push_read_sig(png_ptr, info_ptr);
52 break; 51 break;
53 } 52 }
54 case PNG_READ_CHUNK_MODE: 53 case PNG_READ_CHUNK_MODE:
55 { 54 {
56 png_push_read_chunk(png_ptr, info_ptr); 55 png_push_read_chunk(png_ptr, info_ptr);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 png_size_t num_checked = png_ptr->sig_bytes, 106 png_size_t num_checked = png_ptr->sig_bytes,
108 num_to_check = 8 - num_checked; 107 num_to_check = 8 - num_checked;
109 108
110 if (png_ptr->buffer_size < num_to_check) 109 if (png_ptr->buffer_size < num_to_check)
111 { 110 {
112 num_to_check = png_ptr->buffer_size; 111 num_to_check = png_ptr->buffer_size;
113 } 112 }
114 113
115 png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]), 114 png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]),
116 num_to_check); 115 num_to_check);
117 png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes+num_to_check); 116 png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes + num_to_check);
118 117
119 if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check)) 118 if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
120 { 119 {
121 if (num_checked < 4 && 120 if (num_checked < 4 &&
122 png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4)) 121 png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
123 png_error(png_ptr, "Not a PNG file"); 122 png_error(png_ptr, "Not a PNG file");
124 else 123 else
125 png_error(png_ptr, "PNG file corrupted by ASCII conversion"); 124 png_error(png_ptr, "PNG file corrupted by ASCII conversion");
126 } 125 }
127 else 126 else
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 { 202 {
204 png_byte chunk_length[4]; 203 png_byte chunk_length[4];
205 204
206 if (png_ptr->buffer_size < 8) 205 if (png_ptr->buffer_size < 8)
207 { 206 {
208 png_push_save_buffer(png_ptr); 207 png_push_save_buffer(png_ptr);
209 return; 208 return;
210 } 209 }
211 210
212 png_push_fill_buffer(png_ptr, chunk_length, 4); 211 png_push_fill_buffer(png_ptr, chunk_length, 4);
213 png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length); 212 png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
214 png_reset_crc(png_ptr); 213 png_reset_crc(png_ptr);
215 png_crc_read(png_ptr, png_ptr->chunk_name, 4); 214 png_crc_read(png_ptr, png_ptr->chunk_name, 4);
215 png_check_chunk_name(png_ptr, png_ptr->chunk_name);
216 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; 216 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
217 } 217 }
218 218
219 if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) 219 if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
220 if(png_ptr->mode & PNG_AFTER_IDAT) 220 if (png_ptr->mode & PNG_AFTER_IDAT)
221 png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT; 221 png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
222 222
223 if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4)) 223 if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
224 { 224 {
225 if (png_ptr->push_length != 13)
226 png_error(png_ptr, "Invalid IHDR length");
225 if (png_ptr->push_length + 4 > png_ptr->buffer_size) 227 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
226 { 228 {
227 if (png_ptr->push_length != 13)
228 png_error(png_ptr, "Invalid IHDR length");
229 png_push_save_buffer(png_ptr); 229 png_push_save_buffer(png_ptr);
230 return; 230 return;
231 } 231 }
232 png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length); 232 png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length);
233 } 233 }
234 else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4)) 234 else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
235 { 235 {
236 if (png_ptr->push_length + 4 > png_ptr->buffer_size) 236 if (png_ptr->push_length + 4 > png_ptr->buffer_size)
237 { 237 {
238 png_push_save_buffer(png_ptr); 238 png_push_save_buffer(png_ptr);
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 png_crc_finish(png_ptr, 0); 558 png_crc_finish(png_ptr, 0);
559 png_ptr->process_mode = PNG_READ_CHUNK_MODE; 559 png_ptr->process_mode = PNG_READ_CHUNK_MODE;
560 } 560 }
561 } 561 }
562 562
563 void PNGAPI 563 void PNGAPI
564 png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length) 564 png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
565 { 565 {
566 png_bytep ptr; 566 png_bytep ptr;
567 567
568 if(png_ptr == NULL) return; 568 if (png_ptr == NULL) return;
569 ptr = buffer; 569 ptr = buffer;
570 if (png_ptr->save_buffer_size) 570 if (png_ptr->save_buffer_size)
571 { 571 {
572 png_size_t save_size; 572 png_size_t save_size;
573 573
574 if (length < png_ptr->save_buffer_size) 574 if (length < png_ptr->save_buffer_size)
575 save_size = length; 575 save_size = length;
576 else 576 else
577 save_size = png_ptr->save_buffer_size; 577 save_size = png_ptr->save_buffer_size;
578 578
(...skipping 20 matching lines...) Expand all
599 } 599 }
600 } 600 }
601 601
602 void /* PRIVATE */ 602 void /* PRIVATE */
603 png_push_save_buffer(png_structp png_ptr) 603 png_push_save_buffer(png_structp png_ptr)
604 { 604 {
605 if (png_ptr->save_buffer_size) 605 if (png_ptr->save_buffer_size)
606 { 606 {
607 if (png_ptr->save_buffer_ptr != png_ptr->save_buffer) 607 if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
608 { 608 {
609 png_size_t i,istop; 609 png_size_t i, istop;
610 png_bytep sp; 610 png_bytep sp;
611 png_bytep dp; 611 png_bytep dp;
612 612
613 istop = png_ptr->save_buffer_size; 613 istop = png_ptr->save_buffer_size;
614 for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer; 614 for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer;
615 i < istop; i++, sp++, dp++) 615 i < istop; i++, sp++, dp++)
616 { 616 {
617 *dp = *sp; 617 *dp = *sp;
618 } 618 }
619 } 619 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 { 668 {
669 png_byte chunk_length[4]; 669 png_byte chunk_length[4];
670 670
671 if (png_ptr->buffer_size < 8) 671 if (png_ptr->buffer_size < 8)
672 { 672 {
673 png_push_save_buffer(png_ptr); 673 png_push_save_buffer(png_ptr);
674 return; 674 return;
675 } 675 }
676 676
677 png_push_fill_buffer(png_ptr, chunk_length, 4); 677 png_push_fill_buffer(png_ptr, chunk_length, 4);
678 png_ptr->push_length = png_get_uint_31(png_ptr,chunk_length); 678 png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
679 png_reset_crc(png_ptr); 679 png_reset_crc(png_ptr);
680 png_crc_read(png_ptr, png_ptr->chunk_name, 4); 680 png_crc_read(png_ptr, png_ptr->chunk_name, 4);
681 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; 681 png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
682 682
683 if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4)) 683 if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
684 { 684 {
685 png_ptr->process_mode = PNG_READ_CHUNK_MODE; 685 png_ptr->process_mode = PNG_READ_CHUNK_MODE;
686 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) 686 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
687 png_error(png_ptr, "Not enough compressed data"); 687 png_error(png_ptr, "Not enough compressed data");
688 return; 688 return;
689 } 689 }
690 690
691 png_ptr->idat_size = png_ptr->push_length; 691 png_ptr->idat_size = png_ptr->push_length;
692 } 692 }
693 if (png_ptr->idat_size && png_ptr->save_buffer_size) 693 if (png_ptr->idat_size && png_ptr->save_buffer_size)
694 { 694 {
695 png_size_t save_size; 695 png_size_t save_size;
696 696
697 if (png_ptr->idat_size < (png_uint_32)png_ptr->save_buffer_size) 697 if (png_ptr->idat_size < (png_uint_32)png_ptr->save_buffer_size)
698 { 698 {
699 save_size = (png_size_t)png_ptr->idat_size; 699 save_size = (png_size_t)png_ptr->idat_size;
700 /* check for overflow */ 700 /* check for overflow */
701 if((png_uint_32)save_size != png_ptr->idat_size) 701 if ((png_uint_32)save_size != png_ptr->idat_size)
702 png_error(png_ptr, "save_size overflowed in pngpread"); 702 png_error(png_ptr, "save_size overflowed in pngpread");
703 } 703 }
704 else 704 else
705 save_size = png_ptr->save_buffer_size; 705 save_size = png_ptr->save_buffer_size;
706 706
707 png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); 707 png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
708 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) 708 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
709 png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size); 709 png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
710 png_ptr->idat_size -= save_size; 710 png_ptr->idat_size -= save_size;
711 png_ptr->buffer_size -= save_size; 711 png_ptr->buffer_size -= save_size;
712 png_ptr->save_buffer_size -= save_size; 712 png_ptr->save_buffer_size -= save_size;
713 png_ptr->save_buffer_ptr += save_size; 713 png_ptr->save_buffer_ptr += save_size;
714 } 714 }
715 if (png_ptr->idat_size && png_ptr->current_buffer_size) 715 if (png_ptr->idat_size && png_ptr->current_buffer_size)
716 { 716 {
717 png_size_t save_size; 717 png_size_t save_size;
718 718
719 if (png_ptr->idat_size < (png_uint_32)png_ptr->current_buffer_size) 719 if (png_ptr->idat_size < (png_uint_32)png_ptr->current_buffer_size)
720 { 720 {
721 save_size = (png_size_t)png_ptr->idat_size; 721 save_size = (png_size_t)png_ptr->idat_size;
722 /* check for overflow */ 722 /* check for overflow */
723 if((png_uint_32)save_size != png_ptr->idat_size) 723 if ((png_uint_32)save_size != png_ptr->idat_size)
724 png_error(png_ptr, "save_size overflowed in pngpread"); 724 png_error(png_ptr, "save_size overflowed in pngpread");
725 } 725 }
726 else 726 else
727 save_size = png_ptr->current_buffer_size; 727 save_size = png_ptr->current_buffer_size;
728 728
729 png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); 729 png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
730 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) 730 if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
731 png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size); 731 png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size);
732 732
733 png_ptr->idat_size -= save_size; 733 png_ptr->idat_size -= save_size;
(...skipping 19 matching lines...) Expand all
753 png_process_IDAT_data(png_structp png_ptr, png_bytep buffer, 753 png_process_IDAT_data(png_structp png_ptr, png_bytep buffer,
754 png_size_t buffer_length) 754 png_size_t buffer_length)
755 { 755 {
756 int ret; 756 int ret;
757 757
758 if ((png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) && buffer_length) 758 if ((png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) && buffer_length)
759 png_error(png_ptr, "Extra compression data"); 759 png_error(png_ptr, "Extra compression data");
760 760
761 png_ptr->zstream.next_in = buffer; 761 png_ptr->zstream.next_in = buffer;
762 png_ptr->zstream.avail_in = (uInt)buffer_length; 762 png_ptr->zstream.avail_in = (uInt)buffer_length;
763 for(;;) 763 for (;;)
764 { 764 {
765 ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); 765 ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
766 if (ret != Z_OK) 766 if (ret != Z_OK)
767 { 767 {
768 if (ret == Z_STREAM_END) 768 if (ret == Z_STREAM_END)
769 { 769 {
770 if (png_ptr->zstream.avail_in) 770 if (png_ptr->zstream.avail_in)
771 png_error(png_ptr, "Extra compressed data"); 771 png_error(png_ptr, "Extra compressed data");
772 if (!(png_ptr->zstream.avail_out)) 772 if (!(png_ptr->zstream.avail_out))
773 { 773 {
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 if (png_ptr->row_number < png_ptr->num_rows) 1013 if (png_ptr->row_number < png_ptr->num_rows)
1014 return; 1014 return;
1015 1015
1016 if (png_ptr->interlaced) 1016 if (png_ptr->interlaced)
1017 { 1017 {
1018 png_ptr->row_number = 0; 1018 png_ptr->row_number = 0;
1019 png_memset_check(png_ptr, png_ptr->prev_row, 0, 1019 png_memset_check(png_ptr, png_ptr->prev_row, 0,
1020 png_ptr->rowbytes + 1); 1020 png_ptr->rowbytes + 1);
1021 do 1021 do
1022 { 1022 {
1023 int pass; 1023 png_ptr->pass++;
1024 pass = png_ptr->pass; 1024 if ((png_ptr->pass == 1 && png_ptr->width < 5) ||
1025 pass++; 1025 (png_ptr->pass == 3 && png_ptr->width < 3) ||
1026 if ((pass == 1 && png_ptr->width < 5) || 1026 (png_ptr->pass == 5 && png_ptr->width < 2))
1027 (pass == 3 && png_ptr->width < 3) || 1027 png_ptr->pass++;
1028 (pass == 5 && png_ptr->width < 2))
1029 pass++;
1030 1028
1031 if (pass > 7) 1029 if (png_ptr->pass > 7)
1032 pass--; 1030 png_ptr->pass--;
1033 png_ptr->pass = (png_byte) pass; 1031 if (png_ptr->pass >= 7)
1034 if (pass < 7) 1032 break;
1035 {
1036 png_ptr->iwidth = (png_ptr->width +
1037 png_pass_inc[pass] - 1 -
1038 png_pass_start[pass]) /
1039 png_pass_inc[pass];
1040 1033
1041 png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, 1034 png_ptr->iwidth = (png_ptr->width +
1042 png_ptr->iwidth) + 1; 1035 png_pass_inc[png_ptr->pass] - 1 -
1036 png_pass_start[png_ptr->pass]) /
1037 png_pass_inc[png_ptr->pass];
1043 1038
1044 if (png_ptr->transformations & PNG_INTERLACE) 1039 png_ptr->irowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,
1045 break; 1040 png_ptr->iwidth) + 1;
1046 1041
1047 png_ptr->num_rows = (png_ptr->height + 1042 if (png_ptr->transformations & PNG_INTERLACE)
1048 png_pass_yinc[pass] - 1 - 1043 break;
1049 png_pass_ystart[pass]) / 1044
1050 png_pass_yinc[pass]; 1045 png_ptr->num_rows = (png_ptr->height +
1051 } 1046 png_pass_yinc[png_ptr->pass] - 1 -
1052 else 1047 png_pass_ystart[png_ptr->pass]) /
1053 break; 1048 png_pass_yinc[png_ptr->pass];
1054 1049
1055 } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0); 1050 } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0);
1056 } 1051 }
1057 } 1052 }
1058 1053
1059 #if defined(PNG_READ_tEXt_SUPPORTED) 1054 #if defined(PNG_READ_tEXt_SUPPORTED)
1060 void /* PRIVATE */ 1055 void /* PRIVATE */
1061 png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 1056 png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32
1062 length) 1057 length)
1063 { 1058 {
1064 if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND)) 1059 if (!(png_ptr->mode & PNG_HAVE_IHDR) || (png_ptr->mode & PNG_HAVE_IEND))
1065 { 1060 {
1066 png_error(png_ptr, "Out of place tEXt"); 1061 png_error(png_ptr, "Out of place tEXt");
1067 info_ptr = info_ptr; /* to quiet some compiler warnings */ 1062 info_ptr = info_ptr; /* to quiet some compiler warnings */
1068 } 1063 }
1069 1064
1070 #ifdef PNG_MAX_MALLOC_64K 1065 #ifdef PNG_MAX_MALLOC_64K
1071 png_ptr->skip_length = 0; /* This may not be necessary */ 1066 png_ptr->skip_length = 0; /* This may not be necessary */
1072 1067
1073 if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */ 1068 if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */
1074 { 1069 {
1075 png_warning(png_ptr, "tEXt chunk too large to fit in memory"); 1070 png_warning(png_ptr, "tEXt chunk too large to fit in memory");
1076 png_ptr->skip_length = length - (png_uint_32)65535L; 1071 png_ptr->skip_length = length - (png_uint_32)65535L;
1077 length = (png_uint_32)65535L; 1072 length = (png_uint_32)65535L;
1078 } 1073 }
1079 #endif 1074 #endif
1080 1075
1081 png_ptr->current_text = (png_charp)png_malloc(png_ptr, 1076 png_ptr->current_text = (png_charp)png_malloc(png_ptr,
1082 (png_uint_32)(length+1)); 1077 (png_uint_32)(length + 1));
1083 png_ptr->current_text[length] = '\0'; 1078 png_ptr->current_text[length] = '\0';
1084 png_ptr->current_text_ptr = png_ptr->current_text; 1079 png_ptr->current_text_ptr = png_ptr->current_text;
1085 png_ptr->current_text_size = (png_size_t)length; 1080 png_ptr->current_text_size = (png_size_t)length;
1086 png_ptr->current_text_left = (png_size_t)length; 1081 png_ptr->current_text_left = (png_size_t)length;
1087 png_ptr->process_mode = PNG_READ_tEXt_MODE; 1082 png_ptr->process_mode = PNG_READ_tEXt_MODE;
1088 } 1083 }
1089 1084
1090 void /* PRIVATE */ 1085 void /* PRIVATE */
1091 png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr) 1086 png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr)
1092 { 1087 {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 */ 1165 */
1171 if (length > (png_uint_32)65535L) 1166 if (length > (png_uint_32)65535L)
1172 { 1167 {
1173 png_warning(png_ptr, "zTXt chunk too large to fit in memory"); 1168 png_warning(png_ptr, "zTXt chunk too large to fit in memory");
1174 png_push_crc_skip(png_ptr, length); 1169 png_push_crc_skip(png_ptr, length);
1175 return; 1170 return;
1176 } 1171 }
1177 #endif 1172 #endif
1178 1173
1179 png_ptr->current_text = (png_charp)png_malloc(png_ptr, 1174 png_ptr->current_text = (png_charp)png_malloc(png_ptr,
1180 (png_uint_32)(length+1)); 1175 (png_uint_32)(length + 1));
1181 png_ptr->current_text[length] = '\0'; 1176 png_ptr->current_text[length] = '\0';
1182 png_ptr->current_text_ptr = png_ptr->current_text; 1177 png_ptr->current_text_ptr = png_ptr->current_text;
1183 png_ptr->current_text_size = (png_size_t)length; 1178 png_ptr->current_text_size = (png_size_t)length;
1184 png_ptr->current_text_left = (png_size_t)length; 1179 png_ptr->current_text_left = (png_size_t)length;
1185 png_ptr->process_mode = PNG_READ_zTXt_MODE; 1180 png_ptr->process_mode = PNG_READ_zTXt_MODE;
1186 } 1181 }
1187 1182
1188 void /* PRIVATE */ 1183 void /* PRIVATE */
1189 png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr) 1184 png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
1190 { 1185 {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 png_ptr->current_text = NULL; 1256 png_ptr->current_text = NULL;
1262 png_free(png_ptr, key); 1257 png_free(png_ptr, key);
1263 png_free(png_ptr, text); 1258 png_free(png_ptr, text);
1264 return; 1259 return;
1265 } 1260 }
1266 if (!(png_ptr->zstream.avail_out) || ret == Z_STREAM_END) 1261 if (!(png_ptr->zstream.avail_out) || ret == Z_STREAM_END)
1267 { 1262 {
1268 if (text == NULL) 1263 if (text == NULL)
1269 { 1264 {
1270 text = (png_charp)png_malloc(png_ptr, 1265 text = (png_charp)png_malloc(png_ptr,
1271 (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out 1266 (png_uint_32)(png_ptr->zbuf_size
1272 + key_size + 1)); 1267 - png_ptr->zstream.avail_out + key_size + 1));
1273 png_memcpy(text + key_size, png_ptr->zbuf, 1268 png_memcpy(text + key_size, png_ptr->zbuf,
1274 png_ptr->zbuf_size - png_ptr->zstream.avail_out); 1269 png_ptr->zbuf_size - png_ptr->zstream.avail_out);
1275 png_memcpy(text, key, key_size); 1270 png_memcpy(text, key, key_size);
1276 text_size = key_size + png_ptr->zbuf_size - 1271 text_size = key_size + png_ptr->zbuf_size -
1277 png_ptr->zstream.avail_out; 1272 png_ptr->zstream.avail_out;
1278 *(text + text_size) = '\0'; 1273 *(text + text_size) = '\0';
1279 } 1274 }
1280 else 1275 else
1281 { 1276 {
1282 png_charp tmp; 1277 png_charp tmp;
1283 1278
1284 tmp = text; 1279 tmp = text;
1285 text = (png_charp)png_malloc(png_ptr, text_size + 1280 text = (png_charp)png_malloc(png_ptr, text_size +
1286 (png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out 1281 (png_uint_32)(png_ptr->zbuf_size
1287 + 1)); 1282 - png_ptr->zstream.avail_out + 1));
1288 png_memcpy(text, tmp, text_size); 1283 png_memcpy(text, tmp, text_size);
1289 png_free(png_ptr, tmp); 1284 png_free(png_ptr, tmp);
1290 png_memcpy(text + text_size, png_ptr->zbuf, 1285 png_memcpy(text + text_size, png_ptr->zbuf,
1291 png_ptr->zbuf_size - png_ptr->zstream.avail_out); 1286 png_ptr->zbuf_size - png_ptr->zstream.avail_out);
1292 text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out; 1287 text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out;
1293 *(text + text_size) = '\0'; 1288 *(text + text_size) = '\0';
1294 } 1289 }
1295 if (ret != Z_STREAM_END) 1290 if (ret != Z_STREAM_END)
1296 { 1291 {
1297 png_ptr->zstream.next_out = png_ptr->zbuf; 1292 png_ptr->zstream.next_out = png_ptr->zbuf;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1360 1355
1361 if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */ 1356 if (length > (png_uint_32)65535L) /* Can't hold entire string in memory */
1362 { 1357 {
1363 png_warning(png_ptr, "iTXt chunk too large to fit in memory"); 1358 png_warning(png_ptr, "iTXt chunk too large to fit in memory");
1364 png_ptr->skip_length = length - (png_uint_32)65535L; 1359 png_ptr->skip_length = length - (png_uint_32)65535L;
1365 length = (png_uint_32)65535L; 1360 length = (png_uint_32)65535L;
1366 } 1361 }
1367 #endif 1362 #endif
1368 1363
1369 png_ptr->current_text = (png_charp)png_malloc(png_ptr, 1364 png_ptr->current_text = (png_charp)png_malloc(png_ptr,
1370 (png_uint_32)(length+1)); 1365 (png_uint_32)(length + 1));
1371 png_ptr->current_text[length] = '\0'; 1366 png_ptr->current_text[length] = '\0';
1372 png_ptr->current_text_ptr = png_ptr->current_text; 1367 png_ptr->current_text_ptr = png_ptr->current_text;
1373 png_ptr->current_text_size = (png_size_t)length; 1368 png_ptr->current_text_size = (png_size_t)length;
1374 png_ptr->current_text_left = (png_size_t)length; 1369 png_ptr->current_text_left = (png_size_t)length;
1375 png_ptr->process_mode = PNG_READ_iTXt_MODE; 1370 png_ptr->process_mode = PNG_READ_iTXt_MODE;
1376 } 1371 }
1377 1372
1378 void /* PRIVATE */ 1373 void /* PRIVATE */
1379 png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr) 1374 png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
1380 { 1375 {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1461 #endif 1456 #endif
1462 1457
1463 /* This function is called when we haven't found a handler for this 1458 /* This function is called when we haven't found a handler for this
1464 * chunk. If there isn't a problem with the chunk itself (ie a bad chunk 1459 * chunk. If there isn't a problem with the chunk itself (ie a bad chunk
1465 * name or a critical chunk), the chunk is (currently) silently ignored. 1460 * name or a critical chunk), the chunk is (currently) silently ignored.
1466 */ 1461 */
1467 void /* PRIVATE */ 1462 void /* PRIVATE */
1468 png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 1463 png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32
1469 length) 1464 length)
1470 { 1465 {
1471 png_uint_32 skip=0; 1466 png_uint_32 skip = 0;
1472 png_check_chunk_name(png_ptr, png_ptr->chunk_name);
1473 1467
1474 if (!(png_ptr->chunk_name[0] & 0x20)) 1468 if (!(png_ptr->chunk_name[0] & 0x20))
1475 { 1469 {
1476 #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) 1470 #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
1477 if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != 1471 if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
1478 PNG_HANDLE_CHUNK_ALWAYS 1472 PNG_HANDLE_CHUNK_ALWAYS
1479 #if defined(PNG_READ_USER_CHUNKS_SUPPORTED) 1473 #if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
1480 && png_ptr->read_user_chunk_fn == NULL 1474 && png_ptr->read_user_chunk_fn == NULL
1481 #endif 1475 #endif
1482 ) 1476 )
1483 #endif 1477 #endif
1484 png_chunk_error(png_ptr, "unknown critical chunk"); 1478 png_chunk_error(png_ptr, "unknown critical chunk");
1485 1479
1486 info_ptr = info_ptr; /* to quiet some compiler warnings */ 1480 info_ptr = info_ptr; /* to quiet some compiler warnings */
1487 } 1481 }
1488 1482
1489 #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) 1483 #if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
1490 if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS) 1484 if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS)
1491 { 1485 {
1492 #ifdef PNG_MAX_MALLOC_64K 1486 #ifdef PNG_MAX_MALLOC_64K
1493 if (length > (png_uint_32)65535L) 1487 if (length > (png_uint_32)65535L)
1494 { 1488 {
1495 png_warning(png_ptr, "unknown chunk too large to fit in memory"); 1489 png_warning(png_ptr, "unknown chunk too large to fit in memory");
1496 skip = length - (png_uint_32)65535L; 1490 skip = length - (png_uint_32)65535L;
1497 length = (png_uint_32)65535L; 1491 length = (png_uint_32)65535L;
1498 } 1492 }
1499 #endif 1493 #endif
1500 png_memcpy((png_charp)png_ptr->unknown_chunk.name, 1494 png_memcpy((png_charp)png_ptr->unknown_chunk.name,
1501 (png_charp)png_ptr->chunk_name, 1495 (png_charp)png_ptr->chunk_name,
1502 png_sizeof(png_ptr->unknown_chunk.name)); 1496 png_sizeof(png_ptr->unknown_chunk.name));
1503 png_ptr->unknown_chunk.name[png_sizeof(png_ptr->unknown_chunk.name)-1]='\0 '; 1497 png_ptr->unknown_chunk.name[png_sizeof(png_ptr->unknown_chunk.name) - 1]
1498 = '\0';
1504 1499
1505 png_ptr->unknown_chunk.size = (png_size_t)length; 1500 png_ptr->unknown_chunk.size = (png_size_t)length;
1506 if (length == 0) 1501 if (length == 0)
1507 png_ptr->unknown_chunk.data = NULL; 1502 png_ptr->unknown_chunk.data = NULL;
1508 else 1503 else
1509 { 1504 {
1510 png_ptr->unknown_chunk.data = (png_bytep)png_malloc(png_ptr, length); 1505 png_ptr->unknown_chunk.data = (png_bytep)png_malloc(png_ptr,
1506 (png_uint_32)length);
1511 png_crc_read(png_ptr, (png_bytep)png_ptr->unknown_chunk.data, length); 1507 png_crc_read(png_ptr, (png_bytep)png_ptr->unknown_chunk.data, length);
1512 } 1508 }
1513 #if defined(PNG_READ_USER_CHUNKS_SUPPORTED) 1509 #if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
1514 if(png_ptr->read_user_chunk_fn != NULL) 1510 if (png_ptr->read_user_chunk_fn != NULL)
1515 { 1511 {
1516 /* callback to user unknown chunk handler */ 1512 /* callback to user unknown chunk handler */
1517 int ret; 1513 int ret;
1518 ret = (*(png_ptr->read_user_chunk_fn)) 1514 ret = (*(png_ptr->read_user_chunk_fn))
1519 (png_ptr, &png_ptr->unknown_chunk); 1515 (png_ptr, &png_ptr->unknown_chunk);
1520 if (ret < 0) 1516 if (ret < 0)
1521 png_chunk_error(png_ptr, "error in user chunk"); 1517 png_chunk_error(png_ptr, "error in user chunk");
1522 if (ret == 0) 1518 if (ret == 0)
1523 { 1519 {
1524 if (!(png_ptr->chunk_name[0] & 0x20)) 1520 if (!(png_ptr->chunk_name[0] & 0x20))
1525 if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) != 1521 if (png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
1526 PNG_HANDLE_CHUNK_ALWAYS) 1522 PNG_HANDLE_CHUNK_ALWAYS)
1527 png_chunk_error(png_ptr, "unknown critical chunk"); 1523 png_chunk_error(png_ptr, "unknown critical chunk");
1528 png_set_unknown_chunks(png_ptr, info_ptr, 1524 png_set_unknown_chunks(png_ptr, info_ptr,
1529 &png_ptr->unknown_chunk, 1); 1525 &png_ptr->unknown_chunk, 1);
1530 } 1526 }
1531 } 1527 }
1532 else 1528 else
1533 #endif 1529 #endif
1534 png_set_unknown_chunks(png_ptr, info_ptr, &png_ptr->unknown_chunk, 1); 1530 png_set_unknown_chunks(png_ptr, info_ptr, &png_ptr->unknown_chunk, 1);
1535 png_free(png_ptr, png_ptr->unknown_chunk.data); 1531 png_free(png_ptr, png_ptr->unknown_chunk.data);
(...skipping 28 matching lines...) Expand all
1564 } 1560 }
1565 1561
1566 void PNGAPI 1562 void PNGAPI
1567 png_progressive_combine_row (png_structp png_ptr, 1563 png_progressive_combine_row (png_structp png_ptr,
1568 png_bytep old_row, png_bytep new_row) 1564 png_bytep old_row, png_bytep new_row)
1569 { 1565 {
1570 #ifdef PNG_USE_LOCAL_ARRAYS 1566 #ifdef PNG_USE_LOCAL_ARRAYS
1571 PNG_CONST int FARDATA png_pass_dsp_mask[7] = 1567 PNG_CONST int FARDATA png_pass_dsp_mask[7] =
1572 {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; 1568 {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
1573 #endif 1569 #endif
1574 if(png_ptr == NULL) return; 1570 if (png_ptr == NULL) return;
1575 if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */ 1571 if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */
1576 png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]); 1572 png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]);
1577 } 1573 }
1578 1574
1579 void PNGAPI 1575 void PNGAPI
1580 png_set_progressive_read_fn(png_structp png_ptr, png_voidp progressive_ptr, 1576 png_set_progressive_read_fn(png_structp png_ptr, png_voidp progressive_ptr,
1581 png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, 1577 png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
1582 png_progressive_end_ptr end_fn) 1578 png_progressive_end_ptr end_fn)
1583 { 1579 {
1584 if(png_ptr == NULL) return; 1580 if (png_ptr == NULL) return;
1585 png_ptr->info_fn = info_fn; 1581 png_ptr->info_fn = info_fn;
1586 png_ptr->row_fn = row_fn; 1582 png_ptr->row_fn = row_fn;
1587 png_ptr->end_fn = end_fn; 1583 png_ptr->end_fn = end_fn;
1588 1584
1589 png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer); 1585 png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
1590 } 1586 }
1591 1587
1592 png_voidp PNGAPI 1588 png_voidp PNGAPI
1593 png_get_progressive_ptr(png_structp png_ptr) 1589 png_get_progressive_ptr(png_structp png_ptr)
1594 { 1590 {
1595 if(png_ptr == NULL) return (NULL); 1591 if (png_ptr == NULL) return (NULL);
1596 return png_ptr->io_ptr; 1592 return png_ptr->io_ptr;
1597 } 1593 }
1598 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ 1594 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
OLDNEW
« no previous file with comments | « third_party/libpng/pngmem.c ('k') | third_party/libpng/pngread.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698