Magellan Linux

Contents of /trunk/imlib/patches/imlib-1.9.15-libpng15.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1313 - (show annotations) (download)
Tue May 3 16:40:43 2011 UTC (12 years, 11 months ago) by niro
File size: 10250 byte(s)
added patch to support libpng-1.5
1 diff -Naur imlib-1.9.15/Imlib/load.c imlib-1.9.15-magellan/Imlib/load.c
2 --- imlib-1.9.15/Imlib/load.c 2004-09-21 02:23:20.000000000 +0200
3 +++ imlib-1.9.15-magellan/Imlib/load.c 2011-05-03 18:02:14.000000000 +0200
4 @@ -4,6 +4,8 @@
5 #include "Imlib_private.h"
6 #include <setjmp.h>
7
8 +#define G_MAXINT ((int) 0x7fffffff)
9 +
10 /* Split the ID - damages input */
11
12 static char *
13 @@ -41,13 +43,17 @@
14
15 /*
16 * Make sure we don't wrap on our memory allocations
17 + * we check G_MAXINT/4 because rend.c malloc's w * h * bpp
18 + * + 3 is safety margin
19 */
20
21 void * _imlib_malloc_image(unsigned int w, unsigned int h)
22 {
23 - if( w > 32767 || h > 32767)
24 + if (w <= 0 || w > 32767 ||
25 + h <= 0 || h > 32767 ||
26 + h >= (G_MAXINT/4 - 1) / w)
27 return NULL;
28 - return malloc(w * h * 3);
29 + return malloc(w * h * 3 + 3);
30 }
31
32 #ifdef HAVE_LIBJPEG
33 @@ -191,12 +197,12 @@
34 png_destroy_read_struct(&png_ptr, NULL, NULL);
35 return NULL;
36 }
37 - if (setjmp(png_ptr->jmpbuf))
38 + if (setjmp(png_jmpbuf(png_ptr)))
39 {
40 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
41 return NULL;
42 }
43 - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
44 + if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA)
45 {
46 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
47 return NULL;
48 @@ -254,7 +260,8 @@
49 png_read_image(png_ptr, lines);
50 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
51 ptr = data;
52 - if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
53 + if (color_type == PNG_COLOR_TYPE_GRAY
54 + || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
55 {
56 for (y = 0; y < *h; y++)
57 {
58 @@ -279,6 +286,7 @@
59 }
60 }
61 }
62 +#if 0
63 else if (color_type == PNG_COLOR_TYPE_GRAY)
64 {
65 for (y = 0; y < *h; y++)
66 @@ -294,6 +302,7 @@
67 }
68 }
69 }
70 +#endif
71 else
72 {
73 for (y = 0; y < *h; y++)
74 @@ -360,7 +369,9 @@
75 npix = ww * hh;
76 *w = (int)ww;
77 *h = (int)hh;
78 - if(ww > 32767 || hh > 32767)
79 + if (ww <= 0 || ww > 32767 ||
80 + hh <= 0 || hh > 32767 ||
81 + hh >= (G_MAXINT/sizeof(uint32)) / ww)
82 {
83 TIFFClose(tif);
84 return NULL;
85 @@ -463,7 +474,7 @@
86 }
87 *w = gif->Image.Width;
88 *h = gif->Image.Height;
89 - if (*h > 32767 || *w > 32767)
90 + if (*h <= 0 || *h > 32767 || *w <= 0 || *w > 32767)
91 {
92 return NULL;
93 }
94 @@ -1000,7 +1011,12 @@
95 comment = 0;
96 quote = 0;
97 context = 0;
98 + memset(lookup, 0, sizeof(lookup));
99 +
100 line = malloc(lsz);
101 + if (!line)
102 + return NULL;
103 +
104 while (!done)
105 {
106 pc = c;
107 @@ -1029,25 +1045,25 @@
108 {
109 /* Header */
110 sscanf(line, "%i %i %i %i", w, h, &ncolors, &cpp);
111 - if (ncolors > 32766)
112 + if (ncolors <= 0 || ncolors > 32766)
113 {
114 fprintf(stderr, "IMLIB ERROR: XPM files wth colors > 32766 not supported\n");
115 free(line);
116 return NULL;
117 }
118 - if (cpp > 5)
119 + if (cpp <= 0 || cpp > 5)
120 {
121 fprintf(stderr, "IMLIB ERROR: XPM files with characters per pixel > 5 not supported\n");
122 free(line);
123 return NULL;
124 }
125 - if (*w > 32767)
126 + if (*w <= 0 || *w > 32767)
127 {
128 fprintf(stderr, "IMLIB ERROR: Image width > 32767 pixels for file\n");
129 free(line);
130 return NULL;
131 }
132 - if (*h > 32767)
133 + if (*h <= 0 || *h > 32767)
134 {
135 fprintf(stderr, "IMLIB ERROR: Image height > 32767 pixels for file\n");
136 free(line);
137 @@ -1080,11 +1096,13 @@
138 {
139 int slen;
140 int hascolor, iscolor;
141 + int space;
142
143 iscolor = 0;
144 hascolor = 0;
145 tok[0] = 0;
146 col[0] = 0;
147 + space = sizeof(col) - 1;
148 s[0] = 0;
149 len = strlen(line);
150 strncpy(cmap[j].str, line, cpp);
151 @@ -1107,11 +1125,10 @@
152 {
153 if (k >= len)
154 {
155 - if (col[0])
156 - strcat(col, " ");
157 - if (strlen(col) + strlen(s) < sizeof(col))
158 - strcat(col, s);
159 - }
160 + if (col[0] && space > 0)
161 + strcat(col, " "), space -= 1;
162 + if (slen <= space)
163 + strcat(col, s), space -= slen; }
164 if (col[0])
165 {
166 if (!strcasecmp(col, "none"))
167 @@ -1140,15 +1157,17 @@
168 }
169 }
170 }
171 + if (slen < sizeof(tok));
172 strcpy(tok, s);
173 col[0] = 0;
174 + space = sizeof(col) - 1;
175 }
176 else
177 {
178 - if (col[0])
179 - strcat(col, " ");
180 - strcat(col, s);
181 - }
182 + if (col[0] && space > 0)
183 + strcat(col, " "), space -=1;
184 + if (slen <= space)
185 + strcat(col, s), space -= slen; }
186 }
187 }
188 }
189 @@ -1376,12 +1395,12 @@
190 sscanf(s, "%i %i", w, h);
191 a = *w;
192 b = *h;
193 - if (a > 32767)
194 + if (a <= 0 || a > 32767)
195 {
196 fprintf(stderr, "IMLIB ERROR: Image width > 32767 pixels for file\n");
197 return NULL;
198 }
199 - if (b > 32767)
200 + if (b <= 0 || b > 32767)
201 {
202 fprintf(stderr, "IMLIB ERROR: Image height > 32767 pixels for file\n");
203 return NULL;
204 diff -Naur imlib-1.9.15/Imlib/save.c imlib-1.9.15-magellan/Imlib/save.c
205 --- imlib-1.9.15/Imlib/save.c 2004-09-21 02:22:59.000000000 +0200
206 +++ imlib-1.9.15-magellan/Imlib/save.c 2011-05-03 18:03:59.000000000 +0200
207 @@ -342,7 +342,7 @@
208 png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
209 return 0;
210 }
211 - if (setjmp(png_ptr->jmpbuf))
212 + if (setjmp(png_jmpbuf(png_ptr)))
213 {
214 fclose(f);
215 png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
216 diff -Naur imlib-1.9.15/Imlib/utils.c imlib-1.9.15-magellan/Imlib/utils.c
217 --- imlib-1.9.15/Imlib/utils.c 2004-09-21 02:22:59.000000000 +0200
218 +++ imlib-1.9.15-magellan/Imlib/utils.c 2011-05-03 18:06:41.000000000 +0200
219 @@ -1496,36 +1496,56 @@
220 context = 0;
221 ptr = NULL;
222 end = NULL;
223 + memset(lookup, 0, sizeof(lookup));
224
225 while (!done)
226 {
227 line = data[count++];
228 + if (!line)
229 + break;
230 + line = strdup(line);
231 + if (!line)
232 + break;
233 + len = strlen(line);
234 + for (i = 0; i < len; ++i)
235 + {
236 + c = line[i];
237 + if (c < 32)
238 + line[i] = 32;
239 + else if (c > 127)
240 + line[i] = 127;
241 + }
242 +
243 if (context == 0)
244 {
245 /* Header */
246 sscanf(line, "%i %i %i %i", &w, &h, &ncolors, &cpp);
247 - if (ncolors > 32766)
248 + if (ncolors <= 0 || ncolors > 32766)
249 {
250 fprintf(stderr, "IMLIB ERROR: XPM data wth colors > 32766 not supported\n");
251 free(im);
252 + free(line);
253 return NULL;
254 }
255 - if (cpp > 5)
256 + if (cpp <= 0 || cpp > 5)
257 {
258 fprintf(stderr, "IMLIB ERROR: XPM data with characters per pixel > 5 not supported\n");
259 free(im);
260 + free(line);
261 return NULL;
262 }
263 - if (w > 32767)
264 + if (w <= 0 || w > 32767)
265 {
266 fprintf(stderr, "IMLIB ERROR: Image width > 32767 pixels for data\n");
267 free(im);
268 + free(line);
269 return NULL;
270 }
271 - if (h > 32767)
272 + if (h <= 0 || h > 32767)
273 {
274 fprintf(stderr, "IMLIB ERROR: Image height > 32767 pixels for data\n");
275 free(im);
276 + free(line);
277 return NULL;
278 }
279 cmap = malloc(sizeof(struct _cmap) * ncolors);
280 @@ -1533,6 +1553,7 @@
281 if (!cmap)
282 {
283 free(im);
284 + free(line);
285 return NULL;
286 }
287 im->rgb_width = w;
288 @@ -1542,6 +1563,7 @@
289 {
290 free(cmap);
291 free(im);
292 + free(line);
293 return NULL;
294 }
295 im->alpha_data = NULL;
296 @@ -1817,6 +1839,7 @@
297 }
298 if ((ptr) && ((ptr - im->rgb_data) >= w * h * 3))
299 done = 1;
300 + free(line);
301 }
302 if (!transp)
303 {
304 @@ -1959,13 +1982,13 @@
305 return NULL;
306 }
307
308 - if (setjmp(png_ptr->jmpbuf))
309 + if (setjmp(png_jmpbuf(png_ptr)))
310 {
311 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
312 return NULL;
313 }
314
315 - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
316 + if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA)
317 {
318 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
319 return NULL;
320 diff -Naur imlib-1.9.15/gdk_imlib/io-png.c imlib-1.9.15-magellan/gdk_imlib/io-png.c
321 --- imlib-1.9.15/gdk_imlib/io-png.c 2002-03-04 18:06:29.000000000 +0100
322 +++ imlib-1.9.15-magellan/gdk_imlib/io-png.c 2011-05-03 17:56:26.000000000 +0200
323 @@ -40,13 +40,13 @@
324 return NULL;
325 }
326
327 - if (setjmp(png_ptr->jmpbuf))
328 + if (setjmp(png_jmpbuf(png_ptr)))
329 {
330 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
331 return NULL;
332 }
333
334 - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
335 + if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA)
336 {
337 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
338 return NULL;
339 @@ -275,13 +275,13 @@
340 return NULL;
341 }
342
343 - if (setjmp(png_ptr->jmpbuf))
344 + if (setjmp(png_jmpbuf(png_ptr)))
345 {
346 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
347 return NULL;
348 }
349
350 - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
351 + if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA)
352 {
353 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
354 return NULL;
355 @@ -301,6 +301,9 @@
356 /* Setup Translators */
357 if (color_type == PNG_COLOR_TYPE_PALETTE)
358 png_set_expand(png_ptr);
359 + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
360 + png_set_expand(png_ptr);
361 +
362 png_set_strip_16(png_ptr);
363 png_set_packing(png_ptr);
364 if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
365 @@ -440,13 +443,13 @@
366 return NULL;
367 }
368
369 - if (setjmp(png_ptr->jmpbuf))
370 + if (setjmp(png_jmpbuf(png_ptr)))
371 {
372 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
373 return NULL;
374 }
375
376 - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
377 + if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA)
378 {
379 png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
380 return NULL;
381 @@ -635,7 +638,7 @@
382 png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
383 return 0;
384 }
385 - if (setjmp(png_ptr->jmpbuf))
386 + if (setjmp(png_jmpbuf(png_ptr)))
387 {
388 fclose(f);
389 png_destroy_write_struct(&png_ptr, (png_infopp) NULL);