[devel] Align row_buf on 16-byte boundary in memory.

This commit is contained in:
Glenn Randers-Pehrson 2009-11-20 21:15:06 -06:00
parent edcd6e14c6
commit eddc5af8f5
3 changed files with 19 additions and 6 deletions

View File

@ -694,6 +694,7 @@ version 1.4.0beta102 [November 18, 2009]
version 1.4.0beta103 [November 21, 2009]
Removed obsolete comments about ASM from projects/visualc71/README_zlib.txt
Align row_buf on 16-byte boundary in memory.
Restored the PNG_WRITE_FLUSH_AFTER_IEND guard around the call to png_flush()
after png_write_IEND(). See 1.4.0beta32, 1.4.0beta50 changes above
and 1.2.30, 1.2.30rc01 and rc03 in 1.2.41 CHANGES. Someone needs this

View File

@ -2381,6 +2381,7 @@ version 1.4.0beta102 [November 18, 2009]
version 1.4.0beta103 [November 21, 2009]
Removed obsolete comments about ASM from projects/visualc71/README_zlib.txt
Align row_buf on 16-byte boundary in memory.
Restored the PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED guard around the call
to png_flush() after png_write_IEND(). See 1.4.0beta32, 1.4.0beta50
changes above and 1.2.30, 1.2.30rc01 and rc03 in 1.2.41 CHANGES. Someone

View File

@ -1,7 +1,7 @@
/* pngrutil.c - utilities to read a PNG file
*
* Last changed in libpng 1.4.0 [November 20, 2009]
* Last changed in libpng 1.4.0 [November 21, 2009]
* Copyright (c) 1998-2009 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -3281,15 +3281,26 @@ defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
png_error(png_ptr, "This image requires a row greater than 64KB");
#endif
if (row_bytes + 64 > png_ptr->old_big_row_buf_size)
if (row_bytes + 48 > png_ptr->old_big_row_buf_size)
{
png_free(png_ptr, png_ptr->big_row_buf);
png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
if (png_ptr->interlaced)
png_ptr->big_row_buf = (png_bytep)png_calloc(png_ptr, row_bytes + 64);
else
png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes + 64);
png_memset(png_ptr->big_row_buf, 0, row_bytes + 48);
png_ptr->old_big_row_buf_size = row_bytes + 48;
#ifdef PNG_ALIGNED_MEMORY_SUPPORTED
/* Use 16-byte aligned memory for row_buf with at least 16 bytes
* of padding before and after row_buf.
*/
png_ptr->row_buf = png_ptr->big_row_buf + 32
- (((png_alloc_size_t)&(png_ptr->big_row_buf[0]) + 15) % 16);
png_ptr->old_big_row_buf_size = row_bytes + 48;
#else
/* Use 32 bytes of padding before and 16 bytes after row_buf. */
png_ptr->row_buf = png_ptr->big_row_buf + 32;
png_ptr->old_big_row_buf_size = row_bytes + 64;
#endif
png_ptr->old_big_row_buf_size = row_bytes + 48;
}
#ifdef PNG_MAX_MALLOC_64K