summaryrefslogtreecommitdiff
path: root/pngread.c
diff options
context:
space:
mode:
authorGlenn Randers-Pehrson <glennrp at users.sourceforge.net>2008-07-10 09:10:58 -0500
committerGlenn Randers-Pehrson <glennrp at users.sourceforge.net>2009-04-06 16:17:12 -0500
commit4310a4d813c8870541e4f104d6ae253dfbe2d02f (patch)
treee3b60ac8d697fce975be16124f7e9d4c9546868f /pngread.c
parentb96b342561f170a05a0173f4c15502ef84d8e759 (diff)
downloadlibpng-4310a4d813c8870541e4f104d6ae253dfbe2d02f.tar.gz
Imported from libpng-1.2.30beta04.tarv1.2.30beta04
Diffstat (limited to 'pngread.c')
-rw-r--r--pngread.c91
1 files changed, 41 insertions, 50 deletions
diff --git a/pngread.c b/pngread.c
index b94cac986..e7c69f6fb 100644
--- a/pngread.c
+++ b/pngread.c
@@ -1,7 +1,7 @@
/* pngread.c - read a PNG file
*
- * Last changed in libpng 1.2.30 [July 6, 2008]
+ * Last changed in libpng 1.2.30 [July 10, 2008]
* For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2008 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -88,12 +88,12 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn);
- if(user_png_ver)
+ if (user_png_ver)
{
i=0;
do
{
- if(user_png_ver[i] != png_libpng_ver[i])
+ if (user_png_ver[i] != png_libpng_ver[i])
png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
} while (png_libpng_ver[i++]);
}
@@ -189,9 +189,9 @@ png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver,
png_size_t png_struct_size, png_size_t png_info_size)
{
/* We only come here via pre-1.0.12-compiled applications */
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
- if(png_sizeof(png_struct) > png_struct_size ||
+ if (png_sizeof(png_struct) > png_struct_size ||
png_sizeof(png_info) > png_info_size)
{
char msg[80];
@@ -209,7 +209,7 @@ png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver,
png_warning(png_ptr, msg);
}
#endif
- if(png_sizeof(png_struct) > png_struct_size)
+ if (png_sizeof(png_struct) > png_struct_size)
{
png_ptr->error_fn=NULL;
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
@@ -218,7 +218,7 @@ png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver,
png_error(png_ptr,
"The png struct allocated by the application for reading is too small.");
}
- if(png_sizeof(png_info) > png_info_size)
+ if (png_sizeof(png_info) > png_info_size)
{
png_ptr->error_fn=NULL;
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
@@ -243,11 +243,11 @@ png_read_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver,
png_structp png_ptr=*ptr_ptr;
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
do
{
- if(user_png_ver[i] != png_libpng_ver[i])
+ if (user_png_ver[i] != png_libpng_ver[i])
{
#ifdef PNG_LEGACY_SUPPORTED
png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
@@ -267,12 +267,12 @@ png_read_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver,
png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof(jmp_buf));
#endif
- if(png_sizeof(png_struct) > png_struct_size)
- {
- png_destroy_struct(png_ptr);
- *ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
- png_ptr = *ptr_ptr;
- }
+ if (png_sizeof(png_struct) > png_struct_size)
+ {
+ png_destroy_struct(png_ptr);
+ *ptr_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG);
+ png_ptr = *ptr_ptr;
+ }
/* reset all variables to 0 */
png_memset(png_ptr, 0, png_sizeof(png_struct));
@@ -323,7 +323,7 @@ png_read_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver,
void PNGAPI
png_read_info(png_structp png_ptr, png_infop info_ptr)
{
- if(png_ptr == NULL || info_ptr == NULL) return;
+ if (png_ptr == NULL || info_ptr == NULL) return;
png_debug(1, "in png_read_info\n");
/* If we haven't checked all of the PNG signature bytes, do so now. */
if (png_ptr->sig_bytes < 8)
@@ -346,7 +346,7 @@ png_read_info(png_structp png_ptr, png_infop info_ptr)
png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
}
- for(;;)
+ for (;;)
{
#ifdef PNG_USE_LOCAL_ARRAYS
PNG_CONST PNG_IHDR;
@@ -408,13 +408,11 @@ png_read_info(png_structp png_ptr, png_infop info_ptr)
png_uint_32 length = png_read_chunk_header(png_ptr);
png_bytep chunk_name = png_ptr->chunk_name;
- chunk_name = png_ptr->chunk_name;
-
/* This should be a binary subdivision search or a hash for
* matching the chunk name rather than a linear search.
*/
if (!png_memcmp(chunk_name, png_IDAT, 4))
- if(png_ptr->mode & PNG_AFTER_IDAT)
+ if (png_ptr->mode & PNG_AFTER_IDAT)
png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
if (!png_memcmp(chunk_name, png_IHDR, 4))
@@ -533,7 +531,7 @@ void PNGAPI
png_read_update_info(png_structp png_ptr, png_infop info_ptr)
{
png_debug(1, "in png_read_update_info\n");
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
png_read_start_row(png_ptr);
else
@@ -552,7 +550,7 @@ void PNGAPI
png_start_read_image(png_structp png_ptr)
{
png_debug(1, "in png_start_read_image\n");
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
png_read_start_row(png_ptr);
}
@@ -565,11 +563,11 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
#ifdef PNG_USE_LOCAL_ARRAYS
PNG_CONST PNG_IDAT;
PNG_CONST int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55,
- 0xff};
+ 0xff};
PNG_CONST int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
#endif
int ret;
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
png_debug2(1, "in png_read_row (row %lu, pass %d)\n",
png_ptr->row_number, png_ptr->pass);
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
@@ -733,7 +731,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
png_ptr->row_info.width);
- if(png_ptr->row_buf[0])
+ if (png_ptr->row_buf[0])
png_read_filter_row(png_ptr, &(png_ptr->row_info),
png_ptr->row_buf + 1, png_ptr->prev_row + 1,
(int)(png_ptr->row_buf[0]));
@@ -742,7 +740,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
png_ptr->rowbytes + 1);
#if defined(PNG_MNG_FEATURES_SUPPORTED)
- if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
+ if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
(png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
{
/* Intrapixel differencing */
@@ -822,7 +820,7 @@ png_read_rows(png_structp png_ptr, png_bytepp row,
png_bytepp dp;
png_debug(1, "in png_read_rows\n");
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
rp = row;
dp = display_row;
if (rp != NULL && dp != NULL)
@@ -833,14 +831,14 @@ png_read_rows(png_structp png_ptr, png_bytepp row,
png_read_row(png_ptr, rptr, dptr);
}
- else if(rp != NULL)
+ else if (rp != NULL)
for (i = 0; i < num_rows; i++)
{
png_bytep rptr = *rp;
png_read_row(png_ptr, rptr, png_bytep_NULL);
rp++;
}
- else if(dp != NULL)
+ else if (dp != NULL)
for (i = 0; i < num_rows; i++)
{
png_bytep dptr = *dp;
@@ -871,7 +869,7 @@ png_read_image(png_structp png_ptr, png_bytepp image)
png_bytepp rp;
png_debug(1, "in png_read_image\n");
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
#ifdef PNG_READ_INTERLACING_SUPPORTED
pass = png_set_interlace_handling(png_ptr);
@@ -906,11 +904,11 @@ png_read_image(png_structp png_ptr, png_bytepp image)
void PNGAPI
png_read_end(png_structp png_ptr, png_infop info_ptr)
{
- png_byte chunk_length[4];
+ png_bytep chunk_name;
png_uint_32 length;
png_debug(1, "in png_read_end\n");
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
png_crc_finish(png_ptr, 0); /* Finish off CRC from last IDAT chunk */
do
@@ -972,17 +970,9 @@ png_read_end(png_structp png_ptr, png_infop info_ptr)
PNG_CONST PNG_zTXt;
#endif
#endif /* PNG_USE_LOCAL_ARRAYS */
- png_bytep chunk_name;
-
- png_read_data(png_ptr, chunk_length, 4);
- length = png_get_uint_31(png_ptr, chunk_length);
-
- png_reset_crc(png_ptr);
- png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ length = png_read_chunk_header(png_ptr);
chunk_name = png_ptr->chunk_name;
- png_debug1(0, "Reading %s chunk.\n", chunk_name);
-
if (!png_memcmp(chunk_name, png_IHDR, 4))
png_handle_IHDR(png_ptr, info_ptr, length);
else if (!png_memcmp(chunk_name, png_IEND, 4))
@@ -1099,9 +1089,7 @@ png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
png_debug(1, "in png_destroy_read_struct\n");
if (png_ptr_ptr != NULL)
- {
png_ptr = *png_ptr_ptr;
- }
if (png_ptr == NULL)
return;
@@ -1147,13 +1135,16 @@ png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
*end_info_ptr_ptr = NULL;
}
+ if (png_ptr != NULL)
+ {
#ifdef PNG_USER_MEM_SUPPORTED
- png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn,
- (png_voidp)mem_ptr);
+ png_destroy_struct_2((png_voidp)png_ptr, (png_free_ptr)free_fn,
+ (png_voidp)mem_ptr);
#else
- png_destroy_struct((png_voidp)png_ptr);
+ png_destroy_struct((png_voidp)png_ptr);
#endif
- *png_ptr_ptr = NULL;
+ *png_ptr_ptr = NULL;
+ }
}
/* free all memory used by the read (old method) */
@@ -1304,7 +1295,7 @@ png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr
void PNGAPI
png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn)
{
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
png_ptr->read_row_fn = read_row_fn;
}
@@ -1318,7 +1309,7 @@ png_read_png(png_structp png_ptr, png_infop info_ptr,
{
int row;
- if(png_ptr == NULL) return;
+ if (png_ptr == NULL) return;
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
/* invert the alpha channel from opacity to transparency
*/
@@ -1438,7 +1429,7 @@ png_read_png(png_structp png_ptr, png_infop info_ptr,
#ifdef PNG_FREE_ME_SUPPORTED
png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
#endif
- if(info_ptr->row_pointers == NULL)
+ if (info_ptr->row_pointers == NULL)
{
info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr,
info_ptr->height * png_sizeof(png_bytep));