]>
Commit | Line | Data |
---|---|---|
8c431190 AM |
1 | --- WebCore/platform/image-decoders/png/PNGImageDecoder.cpp |
2 | +++ WebCore/platform/image-decoders/png/PNGImageDecoder.cpp | |
3 | @@ -242,9 +242,9 @@ | |
4 | png_structp png = m_reader->pngPtr(); | |
5 | png_infop info = m_reader->infoPtr(); | |
6 | - png_uint_32 width = png->width; | |
7 | - png_uint_32 height = png->height; | |
8 | + png_uint_32 width = png_get_image_width(png, info); | |
9 | + png_uint_32 height = png_get_image_height(png, info); | |
10 | ||
11 | // Protect against large images. | |
12 | - if (png->width > cMaxPNGSize || png->height > cMaxPNGSize) { | |
13 | + if (width > cMaxPNGSize || height > cMaxPNGSize) { | |
14 | longjmp(JMPBUF(png), 1); | |
15 | return; | |
16 | @@ -319,7 +319,12 @@ | |
17 | ||
18 | if (m_reader->decodingSizeOnly()) { | |
19 | - // If we only needed the size, halt the reader. | |
20 | + // If we only needed the size, halt the reader. | |
21 | +#if defined(PNG_LIBPNG_VER_MAJOR) && defined(PNG_LIBPNG_VER_MINOR) && (PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5)) | |
22 | + // '0' argument to png_process_data_pause means: Do not cache unprocessed data. | |
23 | + m_reader->setReadOffset(m_reader->currentBufferSize() - png_process_data_pause(png, 0)); | |
24 | +#else | |
25 | m_reader->setReadOffset(m_reader->currentBufferSize() - png->buffer_size); | |
26 | png->buffer_size = 0; | |
27 | +#endif | |
28 | } | |
29 | } | |
30 | @@ -344,5 +349,5 @@ | |
31 | buffer.setOriginalFrameRect(IntRect(IntPoint(), size())); | |
32 | ||
33 | - if (m_reader->pngPtr()->interlaced) | |
34 | + if (png_get_interlace_type(m_reader->pngPtr(), m_reader->infoPtr()) != PNG_INTERLACE_NONE) | |
35 | m_reader->createInterlaceBuffer((m_reader->hasAlpha() ? 4 : 3) * size().width() * size().height()); | |
36 | } |