Magellan Linux

Contents of /trunk/openmotif/patches/openmotif-2.2.3-CAN-2004-0687-0688.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (show annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File size: 13114 byte(s)
-import

1 --- openMotif-2.2.3/lib/Xm/Xpmhashtab.c.CAN-2004-0687-0688 2004-09-30 11:52:40.176933831 +0200
2 +++ openMotif-2.2.3/lib/Xm/Xpmhashtab.c 2004-09-30 11:53:47.288717782 +0200
3 @@ -141,7 +141,7 @@
4 xpmHashTable *table;
5 {
6 xpmHashAtom *atomTable = table->atomTable;
7 - int size = table->size;
8 + unsigned int size = table->size;
9 xpmHashAtom *t, *p;
10 int i;
11 int oldSize = size;
12 @@ -150,6 +150,8 @@
13 HASH_TABLE_GROWS
14 table->size = size;
15 table->limit = size / 3;
16 + if (size >= SIZE_MAX / sizeof(*atomTable))
17 + return (XpmNoMemory);
18 atomTable = (xpmHashAtom *) XpmMalloc(size * sizeof(*atomTable));
19 if (!atomTable)
20 return (XpmNoMemory);
21 @@ -210,6 +212,8 @@
22 table->size = INITIAL_HASH_SIZE;
23 table->limit = table->size / 3;
24 table->used = 0;
25 + if (table->size >= SIZE_MAX / sizeof(*atomTable))
26 + return (XpmNoMemory);
27 atomTable = (xpmHashAtom *) XpmMalloc(table->size * sizeof(*atomTable));
28 if (!atomTable)
29 return (XpmNoMemory);
30 --- openMotif-2.2.3/lib/Xm/XpmWrFFrI.c.CAN-2004-0687-0688 2004-09-30 11:36:04.545969020 +0200
31 +++ openMotif-2.2.3/lib/Xm/XpmWrFFrI.c 2004-09-30 11:37:14.583312219 +0200
32 @@ -244,6 +244,8 @@
33 unsigned int x, y, h;
34
35 h = height - 1;
36 + if (cpp != 0 && width >= (SIZE_MAX - 3)/cpp)
37 + return (XpmNoMemory);
38 p = buf = (char *) XpmMalloc(width * cpp + 3);
39 if (!buf)
40 return (XpmNoMemory);
41 --- openMotif-2.2.3/lib/Xm/Xpmdata.c.CAN-2004-0687-0688 2004-09-30 11:51:30.712472999 +0200
42 +++ openMotif-2.2.3/lib/Xm/Xpmdata.c 2004-09-30 11:52:26.665789239 +0200
43 @@ -376,7 +376,7 @@
44 {
45 if (!mdata->type)
46 *cmt = NULL;
47 - else if (mdata->CommentLength) {
48 + else if (mdata->CommentLength != 0 && mdata->CommentLength < SIZE_MAX - 1) {
49 *cmt = (char *) XpmMalloc(mdata->CommentLength + 1);
50 strncpy(*cmt, mdata->Comment, mdata->CommentLength);
51 (*cmt)[mdata->CommentLength] = '\0';
52 --- openMotif-2.2.3/lib/Xm/XpmI.h.CAN-2004-0687-0688 2004-09-30 11:38:09.358760225 +0200
53 +++ openMotif-2.2.3/lib/Xm/XpmI.h 2004-09-30 11:39:58.498714150 +0200
54 @@ -179,6 +179,18 @@
55 boundCheckingCalloc((long)(nelem),(long) (elsize))
56 #endif
57
58 +#if defined(SCO) || defined(__USLC__)
59 +#include <stdint.h> /* For SIZE_MAX */
60 +#endif
61 +#include <limits.h>
62 +#ifndef SIZE_MAX
63 +# ifdef ULONG_MAX
64 +# define SIZE_MAX ULONG_MAX
65 +# else
66 +# define SIZE_MAX UINT_MAX
67 +# endif
68 +#endif
69 +
70 #define XPMMAXCMTLEN BUFSIZ
71 typedef struct {
72 unsigned int type;
73 @@ -276,9 +288,9 @@
74 } *xpmHashAtom;
75
76 typedef struct {
77 - int size;
78 - int limit;
79 - int used;
80 + unsigned int size;
81 + unsigned int limit;
82 + unsigned int used;
83 xpmHashAtom *atomTable;
84 } xpmHashTable;
85
86 --- openMotif-2.2.3/lib/Xm/XpmCrDatFrI.c.CAN-2004-0687-0688 2004-09-30 11:35:18.058379165 +0200
87 +++ openMotif-2.2.3/lib/Xm/XpmCrDatFrI.c 2004-09-30 11:35:43.951808698 +0200
88 @@ -134,6 +134,8 @@
89 */
90 header_nlines = 1 + image->ncolors;
91 header_size = sizeof(char *) * header_nlines;
92 + if (header_size >= SIZE_MAX / sizeof(char *))
93 + return (XpmNoMemory);
94 header = (char **) XpmCalloc(header_size, sizeof(char *));
95 if (!header)
96 return (XpmNoMemory);
97 --- openMotif-2.2.3/lib/Xm/Xpmscan.c.CAN-2004-0687-0688 2004-09-30 12:05:34.424607695 +0200
98 +++ openMotif-2.2.3/lib/Xm/Xpmscan.c 2004-09-30 12:08:16.963282178 +0200
99 @@ -98,7 +98,8 @@
100 LFUNC(ScanTransparentColor, int, (XpmColor *color, unsigned int cpp,
101 XpmAttributes *attributes));
102
103 -LFUNC(ScanOtherColors, int, (Display *display, XpmColor *colors, int ncolors,
104 +LFUNC(ScanOtherColors, int, (Display *display, XpmColor *colors,
105 + unsigned int ncolors,
106 Pixel *pixels, unsigned int mask,
107 unsigned int cpp, XpmAttributes *attributes));
108
109 @@ -225,11 +226,17 @@
110 else
111 cpp = 0;
112
113 + if ((height > 0 && width >= SIZE_MAX / height) ||
114 + width * height >= SIZE_MAX / sizeof(unsigned int))
115 + RETURN(XpmNoMemory);
116 pmap.pixelindex =
117 (unsigned int *) XpmCalloc(width * height, sizeof(unsigned int));
118 if (!pmap.pixelindex)
119 RETURN(XpmNoMemory);
120
121 + if (pmap.size >= SIZE_MAX / sizeof(Pixel))
122 + RETURN(XpmNoMemory);
123 +
124 pmap.pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * pmap.size);
125 if (!pmap.pixels)
126 RETURN(XpmNoMemory);
127 @@ -285,6 +292,8 @@
128 * color
129 */
130
131 + if (pmap.ncolors >= SIZE_MAX / sizeof(XpmColor))
132 + RETURN(XpmNoMemory);
133 colorTable = (XpmColor *) XpmCalloc(pmap.ncolors, sizeof(XpmColor));
134 if (!colorTable)
135 RETURN(XpmNoMemory);
136 @@ -332,6 +341,8 @@
137
138 /* first get a character string */
139 a = 0;
140 + if (cpp >= SIZE_MAX - 1)
141 + return (XpmNoMemory);
142 if (!(s = color->string = (char *) XpmMalloc(cpp + 1)))
143 return (XpmNoMemory);
144 *s++ = printable[c = a % MAXPRINTABLE];
145 @@ -379,7 +390,7 @@
146 ScanOtherColors(display, colors, ncolors, pixels, mask, cpp, attributes)
147 Display *display;
148 XpmColor *colors;
149 - int ncolors;
150 + unsigned int ncolors;
151 Pixel *pixels;
152 unsigned int mask;
153 unsigned int cpp;
154 @@ -423,6 +434,8 @@
155 }
156
157 /* first get character strings and rgb values */
158 + if (ncolors >= SIZE_MAX / sizeof(XColor) || cpp >= SIZE_MAX - 1)
159 + return (XpmNoMemory);
160 xcolors = (XColor *) XpmMalloc(sizeof(XColor) * ncolors);
161 if (!xcolors)
162 return (XpmNoMemory);
163 --- openMotif-2.2.3/lib/Xm/XpmAttrib.c.CAN-2004-0687-0688 2004-09-30 11:33:10.216008908 +0200
164 +++ openMotif-2.2.3/lib/Xm/XpmAttrib.c 2004-09-30 11:33:41.187737616 +0200
165 @@ -41,8 +41,8 @@
166 #include "XpmI.h"
167
168 /* 3.2 backward compatibility code */
169 -LFUNC(CreateOldColorTable, int, (XpmColor *ct, int ncolors,
170 - XpmColor ***oldct));
171 +LFUNC(CreateOldColorTable, int, (XpmColor *ct, unsigned int ncolors,
172 + XpmColor ***oldct));
173
174 LFUNC(FreeOldColorTable, void, (XpmColor **colorTable, int ncolors));
175
176 @@ -52,12 +52,15 @@
177 static int
178 CreateOldColorTable(ct, ncolors, oldct)
179 XpmColor *ct;
180 - int ncolors;
181 + unsigned int ncolors;
182 XpmColor ***oldct;
183 {
184 XpmColor **colorTable, **color;
185 int a;
186
187 + if (ncolors >= SIZE_MAX / sizeof(XpmColor *))
188 + return XpmNoMemory;
189 +
190 colorTable = (XpmColor **) XpmMalloc(ncolors * sizeof(XpmColor *));
191 if (!colorTable) {
192 *oldct = NULL;
193 --- openMotif-2.2.3/lib/Xm/Xpmcreate.c.CAN-2004-0687-0688 2004-09-30 11:40:22.122457590 +0200
194 +++ openMotif-2.2.3/lib/Xm/Xpmcreate.c 2004-09-30 12:49:44.411019183 +0200
195 @@ -804,6 +804,9 @@
196
197 ErrorStatus = XpmSuccess;
198
199 + if (image->ncolors >= SIZE_MAX / sizeof(Pixel))
200 + return (XpmNoMemory);
201 +
202 /* malloc pixels index tables */
203 image_pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * image->ncolors);
204 if (!image_pixels)
205 @@ -947,6 +950,8 @@
206 return (XpmNoMemory);
207
208 #ifndef FOR_MSW
209 + if (height != 0 && (*image_return)->bytes_per_line >= SIZE_MAX / height)
210 + return XpmNoMemory;
211 /* now that bytes_per_line must have been set properly alloc data */
212 (*image_return)->data =
213 (char *) XpmMalloc((*image_return)->bytes_per_line * height);
214 @@ -1992,6 +1997,9 @@
215 xpmGetCmt(data, &colors_cmt);
216
217 /* malloc pixels index tables */
218 + if (ncolors >= SIZE_MAX / sizeof(Pixel))
219 + return XpmNoMemory;
220 +
221 image_pixels = (Pixel *) XpmMalloc(sizeof(Pixel) * ncolors);
222 if (!image_pixels)
223 RETURN(XpmNoMemory);
224 @@ -2207,6 +2215,9 @@
225 {
226 unsigned short colidx[256];
227
228 + if (ncolors > 256)
229 + return (XpmFileInvalid);
230 +
231 bzero((char *)colidx, 256 * sizeof(short));
232 for (a = 0; a < ncolors; a++)
233 colidx[(unsigned char)colorTable[a].string[0]] = a + 1;
234 @@ -2305,6 +2316,9 @@
235 char *s;
236 char buf[BUFSIZ];
237
238 + if (cpp >= sizeof(buf))
239 + return (XpmFileInvalid);
240 +
241 buf[cpp] = '\0';
242 if (USE_HASHTABLE) {
243 xpmHashAtom *slot;
244 --- openMotif-2.2.3/lib/Xm/Xpmparse.c.CAN-2004-0687-0688 2004-09-30 11:54:01.219804716 +0200
245 +++ openMotif-2.2.3/lib/Xm/Xpmparse.c 2004-09-30 12:47:15.676480282 +0200
246 @@ -46,6 +46,25 @@
247
248 #include "XpmI.h"
249 #include <ctype.h>
250 +#include <string.h>
251 +
252 +#ifdef HAS_STRLCAT
253 +# define STRLCAT(dst, src, dstsize) { \
254 + if (strlcat(dst, src, dstsize) >= (dstsize)) \
255 + return (XpmFileInvalid); }
256 +# define STRLCPY(dst, src, dstsize) { \
257 + if (strlcpy(dst, src, dstsize) >= (dstsize)) \
258 + return (XpmFileInvalid); }
259 +#else
260 +# define STRLCAT(dst, src, dstsize) { \
261 + if ((strlen(dst) + strlen(src)) < (dstsize)) \
262 + strcat(dst, src); \
263 + else return (XpmFileInvalid); }
264 +# define STRLCPY(dst, src, dstsize) { \
265 + if (strlen(src) < (dstsize)) \
266 + strcpy(dst, src); \
267 + else return (XpmFileInvalid); }
268 +#endif
269
270 LFUNC(ParsePixels, int, (xpmData *data, unsigned int width,
271 unsigned int height, unsigned int ncolors,
272 @@ -215,7 +234,7 @@
273 unsigned int *extensions;
274 {
275 unsigned int l;
276 - char buf[BUFSIZ];
277 + char buf[BUFSIZ + 1];
278
279 if (!data->format) { /* XPM 2 or 3 */
280
281 @@ -324,10 +343,10 @@
282 XpmColor **colorTablePtr;
283 xpmHashTable *hashtable;
284 {
285 - unsigned int key, l, a, b;
286 + unsigned int key, l, a, b, len;
287 unsigned int curkey; /* current color key */
288 unsigned int lastwaskey; /* key read */
289 - char buf[BUFSIZ];
290 + char buf[BUFSIZ + 1];
291 char curbuf[BUFSIZ]; /* current buffer */
292 char **sptr, *s;
293 XpmColor *color;
294 @@ -335,6 +354,8 @@
295 char **defaults;
296 int ErrorStatus;
297
298 + if (ncolors >= SIZE_MAX / sizeof(XpmColor))
299 + return (XpmNoMemory);
300 colorTable = (XpmColor *) XpmCalloc(ncolors, sizeof(XpmColor));
301 if (!colorTable)
302 return (XpmNoMemory);
303 @@ -346,6 +367,10 @@
304 /*
305 * read pixel value
306 */
307 + if (cpp >= SIZE_MAX - 1) {
308 + xpmFreeColorTable(colorTable, ncolors);
309 + return (XpmNoMemory);
310 + }
311 color->string = (char *) XpmMalloc(cpp + 1);
312 if (!color->string) {
313 xpmFreeColorTable(colorTable, ncolors);
314 @@ -383,13 +408,14 @@
315 }
316 if (!lastwaskey && key < NKEYS) { /* open new key */
317 if (curkey) { /* flush string */
318 - s = (char *) XpmMalloc(strlen(curbuf) + 1);
319 + len = strlen(curbuf) + 1;
320 + s = (char *) XpmMalloc(len);
321 if (!s) {
322 xpmFreeColorTable(colorTable, ncolors);
323 return (XpmNoMemory);
324 }
325 defaults[curkey] = s;
326 - strcpy(s, curbuf);
327 + memcpy(s, curbuf, len);
328 }
329 curkey = key + 1; /* set new key */
330 *curbuf = '\0'; /* reset curbuf */
331 @@ -400,9 +426,9 @@
332 return (XpmFileInvalid);
333 }
334 if (!lastwaskey)
335 - strcat(curbuf, " "); /* append space */
336 + STRLCAT(curbuf, " ", sizeof(curbuf)); /* append space */
337 buf[l] = '\0';
338 - strcat(curbuf, buf);/* append buf */
339 + STRLCAT(curbuf, buf, sizeof(curbuf));/* append buf */
340 lastwaskey = 0;
341 }
342 }
343 @@ -410,12 +436,13 @@
344 xpmFreeColorTable(colorTable, ncolors);
345 return (XpmFileInvalid);
346 }
347 - s = defaults[curkey] = (char *) XpmMalloc(strlen(curbuf) + 1);
348 + len = strlen(curbuf) + 1;
349 + s = defaults[curkey] = (char *) XpmMalloc(len);
350 if (!s) {
351 xpmFreeColorTable(colorTable, ncolors);
352 return (XpmNoMemory);
353 }
354 - strcpy(s, curbuf);
355 + memcpy(s, curbuf, len);
356 }
357 } else { /* XPM 1 */
358 /* get to the beginning of the first string */
359 @@ -428,6 +455,10 @@
360 /*
361 * read pixel value
362 */
363 + if (cpp >= SIZE_MAX - 1) {
364 + xpmFreeColorTable(colorTable, ncolors);
365 + return (XpmNoMemory);
366 + }
367 color->string = (char *) XpmMalloc(cpp + 1);
368 if (!color->string) {
369 xpmFreeColorTable(colorTable, ncolors);
370 @@ -456,16 +487,17 @@
371 *curbuf = '\0'; /* init curbuf */
372 while ((l = xpmNextWord(data, buf, BUFSIZ))) {
373 if (*curbuf != '\0')
374 - strcat(curbuf, " ");/* append space */
375 + STRLCAT(curbuf, " ", sizeof(curbuf));/* append space */
376 buf[l] = '\0';
377 - strcat(curbuf, buf); /* append buf */
378 + STRLCAT(curbuf, buf, sizeof(curbuf)); /* append buf */
379 }
380 - s = (char *) XpmMalloc(strlen(curbuf) + 1);
381 + len = strlen(curbuf) + 1;
382 + s = (char *) XpmMalloc(len);
383 if (!s) {
384 xpmFreeColorTable(colorTable, ncolors);
385 return (XpmNoMemory);
386 }
387 - strcpy(s, curbuf);
388 + memcpy(s, curbuf, len);
389 color->c_color = s;
390 *curbuf = '\0'; /* reset curbuf */
391 if (a < ncolors - 1)
392 @@ -490,6 +522,9 @@
393 unsigned int *iptr, *iptr2;
394 unsigned int a, x, y;
395
396 + if ((height > 0 && width >= SIZE_MAX / height) ||
397 + width * height >= SIZE_MAX / sizeof(unsigned int))
398 + return XpmNoMemory;
399 #ifndef FOR_MSW
400 iptr2 = (unsigned int *) XpmMalloc(sizeof(unsigned int) * width * height);
401 #else
402 @@ -513,6 +548,9 @@
403 {
404 unsigned short colidx[256];
405
406 + if (ncolors > 256)
407 + return (XpmFileInvalid);
408 +
409 bzero((char *)colidx, 256 * sizeof(short));
410 for (a = 0; a < ncolors; a++)
411 colidx[(unsigned char)colorTable[a].string[0]] = a + 1;
412 @@ -590,6 +628,9 @@
413 char *s;
414 char buf[BUFSIZ];
415
416 + if (cpp >= sizeof(buf))
417 + return (XpmFileInvalid);
418 +
419 buf[cpp] = '\0';
420 if (USE_HASHTABLE) {
421 xpmHashAtom *slot;