summaryrefslogtreecommitdiff
path: root/pngmem.c
diff options
context:
space:
mode:
authorGlenn Randers-Pehrson <glennrp at users.sourceforge.net>2011-03-31 20:14:29 -0500
committerGlenn Randers-Pehrson <glennrp at users.sourceforge.net>2011-03-31 20:14:29 -0500
commit6b3d50b2cd4dbbdba3612ea77c24178c4df8b50f (patch)
treede35bc7b35ff92cef282544e2c65aa71b4726025 /pngmem.c
parentdcc3505c7bd0660876fc80110f8e3581900a186a (diff)
downloadlibpng-6b3d50b2cd4dbbdba3612ea77c24178c4df8b50f.tar.gz
[devel] Re-initialize the zlib compressor before compressing non-IDAT chunks.
Diffstat (limited to 'pngmem.c')
-rw-r--r--pngmem.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/pngmem.c b/pngmem.c
index a15d8b085..487c96bec 100644
--- a/pngmem.c
+++ b/pngmem.c
@@ -187,8 +187,9 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
int num_blocks;
png_uint_32 total_size;
png_bytep table;
- int i;
+ int i, mem_level, window_bits;
png_byte huge * hptr;
+ int window_bits
if (ret != NULL)
{
@@ -196,14 +197,22 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
ret = NULL;
}
- if (png_ptr->zlib_window_bits > 14)
- num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14));
+ window_bits =
+ png_ptr->zlib_window_bits >= png_ptr->zlib_text_window_bits ?
+ png_ptr->zlib_window_bits : png_ptr->zlib_text_window_bits;
+
+ if (window_bits > 14)
+ num_blocks = (int)(1 << (window_bits - 14));
else
num_blocks = 1;
- if (png_ptr->zlib_mem_level >= 7)
- num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7));
+ mem_level =
+ png_ptr->zlib_mem_level >= png_ptr->zlib_text_mem_level ?
+ png_ptr->zlib_mem_level : png_ptr->zlib_text_mem_level;
+
+ if (mem_level >= 7)
+ num_blocks += (int)(1 << (mem_level - 7));
else
num_blocks++;
@@ -277,7 +286,7 @@ png_malloc_default,(png_structp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
{
# ifndef PNG_USER_MEM_SUPPORTED
if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
- png_error(png_ptr, "Out of Memory"); /* Note "o" and "M" */
+ png_error(png_ptr, "Out of Memory"); /* Note "O" and "M" */
else
png_warning(png_ptr, "Out of Memory");