summaryrefslogtreecommitdiffstats
path: root/extra/webkit/webkit-1.2.7-libpng-1.5.patch
blob: f71040e9e8afcc88a2f9538937d14ebf3db018ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
$NetBSD: patch-ab,v 1.6 2011/01/25 18:38:16 drochner Exp $

Fix build with png-1.5. From John Bowler.

--- WebCore/platform/image-decoders/png/PNGImageDecoder.cpp.orig	2010-12-28 12:28:51.000000000 +0000
+++ WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -60,7 +60,11 @@ const unsigned long cMaxPNGSize = 100000
 // Called if the decoding of the image fails.
 static void PNGAPI decodingFailed(png_structp png, png_const_charp)
 {
+#if (PNG_LIBPNG_VER < 10500)
     longjmp(JMPBUF(png), 1);
+#else
+    png_longjmp(png, 1);
+#endif
 }
 
 // Callbacks given to the read struct.  The first is for warnings (we want to
@@ -216,18 +220,26 @@ void PNGImageDecoder::headerAvailable()
 {
     png_structp png = m_reader->pngPtr();
     png_infop info = m_reader->infoPtr();
-    png_uint_32 width = png->width;
-    png_uint_32 height = png->height;
+    png_uint_32 width = png_get_image_width(png, info);
+    png_uint_32 height = png_get_image_height(png, info);
     
     // Protect against large images.
-    if (png->width > cMaxPNGSize || png->height > cMaxPNGSize) {
+    if (width > cMaxPNGSize || height > cMaxPNGSize) {
+#if (PNG_LIBPNG_VER < 10500)
         longjmp(JMPBUF(png), 1);
+#else
+        png_longjmp(png, 1);
+#endif
         return;
     }
     
     // We can fill in the size now that the header is available.
     if (!setSize(width, height)) {
+#if (PNG_LIBPNG_VER < 10500)
         longjmp(JMPBUF(png), 1);
+#else
+        png_longjmp(png, 1);
+#endif
         return;
     }
 
@@ -277,8 +289,7 @@ void PNGImageDecoder::headerAvailable()
 
     if (m_reader->decodingSizeOnly()) {
         // If we only needed the size, halt the reader.     
-        m_reader->setReadOffset(m_reader->currentBufferSize() - png->buffer_size);
-        png->buffer_size = 0;
+        m_reader->setReadOffset(m_reader->currentBufferSize() - png_process_data_pause(png, 0/*do not save the data*/));
     }
 }
 
@@ -291,7 +302,11 @@ void PNGImageDecoder::rowAvailable(unsig
     RGBA32Buffer& buffer = m_frameBufferCache[0];
     if (buffer.status() == RGBA32Buffer::FrameEmpty) {
         if (!buffer.setSize(scaledSize().width(), scaledSize().height())) {
+#if (PNG_LIBPNG_VER < 10500)
             longjmp(JMPBUF(m_reader->pngPtr()), 1);
+#else
+            png_longjmp(m_reader->pngPtr(), 1);
+#endif
             return;
         }
         buffer.setStatus(RGBA32Buffer::FramePartial);
@@ -300,7 +315,8 @@ void PNGImageDecoder::rowAvailable(unsig
         // For PNGs, the frame always fills the entire image.
         buffer.setRect(IntRect(IntPoint(), size()));
 
-        if (m_reader->pngPtr()->interlaced)
+        if (png_get_interlace_type(m_reader->pngPtr(), m_reader->infoPtr())
+		!= PNG_INTERLACE_NONE)
             m_reader->createInterlaceBuffer((m_reader->hasAlpha() ? 4 : 3) * size().width() * size().height());
     }