137
137
png_push_read_chunk(png_structp png_ptr, png_infop info_ptr)
139
139
#ifdef PNG_USE_LOCAL_ARRAYS
144
144
#if defined(PNG_READ_bKGD_SUPPORTED)
147
147
#if defined(PNG_READ_cHRM_SUPPORTED)
150
150
#if defined(PNG_READ_gAMA_SUPPORTED)
153
153
#if defined(PNG_READ_hIST_SUPPORTED)
156
156
#if defined(PNG_READ_iCCP_SUPPORTED)
159
159
#if defined(PNG_READ_iTXt_SUPPORTED)
162
162
#if defined(PNG_READ_oFFs_SUPPORTED)
165
165
#if defined(PNG_READ_pCAL_SUPPORTED)
168
168
#if defined(PNG_READ_pHYs_SUPPORTED)
171
171
#if defined(PNG_READ_sBIT_SUPPORTED)
174
174
#if defined(PNG_READ_sCAL_SUPPORTED)
177
177
#if defined(PNG_READ_sRGB_SUPPORTED)
180
180
#if defined(PNG_READ_sPLT_SUPPORTED)
183
183
#if defined(PNG_READ_tEXt_SUPPORTED)
186
186
#if defined(PNG_READ_tIME_SUPPORTED)
189
189
#if defined(PNG_READ_tRNS_SUPPORTED)
192
192
#if defined(PNG_READ_zTXt_SUPPORTED)
195
195
#endif /* PNG_USE_LOCAL_ARRAYS */
196
196
/* First we make sure we have enough data for the 4 byte chunk name
990
990
/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
992
992
/* start of interlace block */
993
const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
993
PNG_CONST int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
995
995
/* offset to next interlace block */
996
const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
996
PNG_CONST int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
998
998
/* start of interlace block in the y direction */
999
const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
999
PNG_CONST int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
1001
1001
/* offset to next interlace block in the y direction */
1002
const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
1004
/* Width of interlace block. This is not currently used - if you need
1005
* it, uncomment it here and in png.h
1006
const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
1002
PNG_CONST int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
1009
1004
/* Height of interlace block. This is not currently used - if you need
1010
1005
* it, uncomment it here and in png.h
1011
const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
1006
PNG_CONST int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
1471
1467
if (!(png_ptr->chunk_name[0] & 0x20))
1473
1469
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
1474
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
1475
PNG_HANDLE_CHUNK_ALWAYS
1470
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
1471
PNG_HANDLE_CHUNK_ALWAYS
1476
1472
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
1477
&& png_ptr->read_user_chunk_fn == NULL
1481
png_chunk_error(png_ptr, "unknown critical chunk");
1473
&& png_ptr->read_user_chunk_fn == NULL
1477
png_chunk_error(png_ptr, "unknown critical chunk");
1483
/* to quiet compiler warnings about unused info_ptr */
1484
if (info_ptr == NULL)
1479
info_ptr = info_ptr; /* to quiet some compiler warnings */
1488
1482
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
1489
1483
if (png_ptr->flags & PNG_FLAG_KEEP_UNKNOWN_CHUNKS)
1491
1485
#ifdef PNG_MAX_MALLOC_64K
1492
if (length > (png_uint_32)65535L)
1494
png_warning(png_ptr, "unknown chunk too large to fit in memory");
1495
skip = length - (png_uint_32)65535L;
1496
length = (png_uint_32)65535L;
1486
if (length > (png_uint_32)65535L)
1488
png_warning(png_ptr, "unknown chunk too large to fit in memory");
1489
skip = length - (png_uint_32)65535L;
1490
length = (png_uint_32)65535L;
1499
png_strcpy((png_charp)png_ptr->unknown_chunk.name,
1500
(png_charp)png_ptr->chunk_name);
1501
png_ptr->unknown_chunk.data = (png_bytep)png_malloc(png_ptr, length);
1502
png_ptr->unknown_chunk.size = (png_size_t)length;
1503
png_crc_read(png_ptr, (png_bytep)png_ptr->unknown_chunk.data, length);
1493
png_strncpy((png_charp)png_ptr->unknown_chunk.name,
1494
(png_charp)png_ptr->chunk_name, 4);
1495
png_ptr->unknown_chunk.name[4] = '\0';
1496
png_ptr->unknown_chunk.data = (png_bytep)png_malloc(png_ptr, length);
1497
png_ptr->unknown_chunk.size = (png_size_t)length;
1498
png_crc_read(png_ptr, (png_bytep)png_ptr->unknown_chunk.data, length);
1504
1499
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
1505
if(png_ptr->read_user_chunk_fn != NULL)
1507
/* callback to user unknown chunk handler */
1509
ret = (*(png_ptr->read_user_chunk_fn))
1510
(png_ptr, &png_ptr->unknown_chunk);
1512
png_chunk_error(png_ptr, "error in user chunk");
1515
if (!(png_ptr->chunk_name[0] & 0x20))
1516
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
1517
PNG_HANDLE_CHUNK_ALWAYS)
1518
png_chunk_error(png_ptr, "unknown critical chunk");
1519
png_set_unknown_chunks(png_ptr, info_ptr,
1520
&png_ptr->unknown_chunk, 1);
1500
if(png_ptr->read_user_chunk_fn != NULL)
1502
/* callback to user unknown chunk handler */
1504
ret = (*(png_ptr->read_user_chunk_fn))
1505
(png_ptr, &png_ptr->unknown_chunk);
1507
png_chunk_error(png_ptr, "error in user chunk");
1510
if (!(png_ptr->chunk_name[0] & 0x20))
1511
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
1512
PNG_HANDLE_CHUNK_ALWAYS)
1513
png_chunk_error(png_ptr, "unknown critical chunk");
1514
png_set_unknown_chunks(png_ptr, info_ptr,
1515
&png_ptr->unknown_chunk, 1);
1524
png_set_unknown_chunks(png_ptr, info_ptr, &png_ptr->unknown_chunk, 1);
1519
png_set_unknown_chunks(png_ptr, info_ptr, &png_ptr->unknown_chunk, 1);
1526
png_free(png_ptr, png_ptr->unknown_chunk.data);
1527
png_ptr->unknown_chunk.data = NULL;
1521
png_free(png_ptr, png_ptr->unknown_chunk.data);
1522
png_ptr->unknown_chunk.data = NULL;