Changeset 1165 for libpng/vendor/current/pngpread.c
- Timestamp:
- Sep 15, 2015, 12:22:09 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified libpng/vendor/current/pngpread.c ¶
r1059 r1165 2 2 /* pngpread.c - read a png file in push mode 3 3 * 4 * Last changed in libpng 1.6.1 5 [November 20, 2014]5 * Copyright (c) 1998-201 4Glenn Randers-Pehrson4 * Last changed in libpng 1.6.18 [July 23, 2015] 5 * Copyright (c) 1998-2015 Glenn Randers-Pehrson 6 6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 7 7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) … … 20 20 #define PNG_READ_CHUNK_MODE 1 21 21 #define PNG_READ_IDAT_MODE 2 22 #define PNG_SKIP_MODE 323 22 #define PNG_READ_tEXt_MODE 4 24 23 #define PNG_READ_zTXt_MODE 5 … … 79 78 png_process_data_skip(png_structrp png_ptr) 80 79 { 81 png_uint_32 remaining = 0; 82 83 if (png_ptr != NULL && png_ptr->process_mode == PNG_SKIP_MODE && 84 png_ptr->skip_length > 0) 85 { 86 /* At the end of png_process_data the buffer size must be 0 (see the loop 87 * above) so we can detect a broken call here: 88 */ 89 if (png_ptr->buffer_size != 0) 90 png_error(png_ptr, 91 "png_process_data_skip called inside png_process_data"); 92 93 /* If is impossible for there to be a saved buffer at this point - 94 * otherwise we could not be in SKIP mode. This will also happen if 95 * png_process_skip is called inside png_process_data (but only very 96 * rarely.) 97 */ 98 if (png_ptr->save_buffer_size != 0) 99 png_error(png_ptr, "png_process_data_skip called with saved data"); 100 101 remaining = png_ptr->skip_length; 102 png_ptr->skip_length = 0; 103 png_ptr->process_mode = PNG_READ_CHUNK_MODE; 104 } 105 106 return remaining; 80 /* TODO: Deprecate and remove this API. 81 * Somewhere the implementation of this seems to have been lost, 82 * or abandoned. It was only to support some internal back-door access 83 * to png_struct) in libpng-1.4.x. 84 */ 85 png_app_warning(png_ptr, 86 "png_process_data_skip is not implemented in any current version of libpng"); 87 return 0; 107 88 } 108 89 … … 133 114 { 134 115 png_push_read_IDAT(png_ptr); 135 break;136 }137 138 case PNG_SKIP_MODE:139 {140 png_push_crc_finish(png_ptr);141 116 break; 142 117 } … … 160 135 { 161 136 png_size_t num_checked = png_ptr->sig_bytes, /* SAFE, does not exceed 8 */ 162 137 num_to_check = 8 - num_checked; 163 138 164 139 if (png_ptr->buffer_size < num_to_check) … … 440 415 } 441 416 442 void /* PRIVATE */443 png_push_crc_skip(png_structrp png_ptr, png_uint_32 skip)444 {445 png_ptr->process_mode = PNG_SKIP_MODE;446 png_ptr->skip_length = skip;447 }448 449 void /* PRIVATE */450 png_push_crc_finish(png_structrp png_ptr)451 {452 if (png_ptr->skip_length != 0 && png_ptr->save_buffer_size != 0)453 {454 png_size_t save_size = png_ptr->save_buffer_size;455 png_uint_32 skip_length = png_ptr->skip_length;456 457 /* We want the smaller of 'skip_length' and 'save_buffer_size', but458 * they are of different types and we don't know which variable has the459 * fewest bits. Carefully select the smaller and cast it to the type of460 * the larger - this cannot overflow. Do not cast in the following test461 * - it will break on either 16 or 64 bit platforms.462 */463 if (skip_length < save_size)464 save_size = (png_size_t)skip_length;465 466 else467 skip_length = (png_uint_32)save_size;468 469 png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);470 471 png_ptr->skip_length -= skip_length;472 png_ptr->buffer_size -= save_size;473 png_ptr->save_buffer_size -= save_size;474 png_ptr->save_buffer_ptr += save_size;475 }476 if (png_ptr->skip_length != 0 && png_ptr->current_buffer_size != 0)477 {478 png_size_t save_size = png_ptr->current_buffer_size;479 png_uint_32 skip_length = png_ptr->skip_length;480 481 /* We want the smaller of 'skip_length' and 'current_buffer_size', here,482 * the same problem exists as above and the same solution.483 */484 if (skip_length < save_size)485 save_size = (png_size_t)skip_length;486 487 else488 skip_length = (png_uint_32)save_size;489 490 png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);491 492 png_ptr->skip_length -= skip_length;493 png_ptr->buffer_size -= save_size;494 png_ptr->current_buffer_size -= save_size;495 png_ptr->current_buffer_ptr += save_size;496 }497 if (png_ptr->skip_length == 0)498 {499 PNG_PUSH_SAVE_BUFFER_IF_LT(4)500 png_crc_finish(png_ptr, 0);501 png_ptr->process_mode = PNG_READ_CHUNK_MODE;502 }503 }504 505 417 void PNGCBAPI 506 418 png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length) … … 585 497 { 586 498 png_free(png_ptr, old_buffer); 587 old_buffer = NULL;588 499 png_error(png_ptr, "Insufficient memory for save_buffer"); 589 500 } … … 591 502 memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size); 592 503 png_free(png_ptr, old_buffer); 593 old_buffer = NULL;594 504 png_ptr->save_buffer_max = new_max; 595 505 } … … 697 607 png_ptr->current_buffer_ptr += save_size; 698 608 } 609 699 610 if (png_ptr->idat_size == 0) 700 611 { … … 727 638 */ 728 639 while (png_ptr->zstream.avail_in > 0 && 729 !(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))640 (png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) == 0) 730 641 { 731 642 int ret; … … 1037 948 } 1038 949 else 950 #endif 1039 951 { 1040 952 png_push_have_row(png_ptr, png_ptr->row_buf + 1); … … 1046 958 png_read_push_finish_row(png_structrp png_ptr) 1047 959 { 960 #ifdef PNG_READ_INTERLACING_SUPPORTED 1048 961 /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */ 1049 962 … … 1070 983 return; 1071 984 985 #ifdef PNG_READ_INTERLACING_SUPPORTED 1072 986 if (png_ptr->interlaced != 0) 1073 987 { … … 1104 1018 } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0); 1105 1019 } 1020 #endif /* READ_INTERLACING */ 1106 1021 } 1107 1022 … … 1128 1043 } 1129 1044 1045 #ifdef PNG_READ_INTERLACING_SUPPORTED 1130 1046 void PNGAPI 1131 1047 png_progressive_combine_row(png_const_structrp png_ptr, png_bytep old_row, … … 1142 1058 png_combine_row(png_ptr, old_row, 1/*blocky display*/); 1143 1059 } 1060 #endif /* READ_INTERLACING */ 1144 1061 1145 1062 void PNGAPI
Note:
See TracChangeset
for help on using the changeset viewer.