Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
smalltalk
smalltalk-2.1.10-xpm-secfix-thomas.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File smalltalk-2.1.10-xpm-secfix-thomas.patch of Package smalltalk
--- packages/blox/tk/BloxTK.c +++ packages/blox/tk/BloxTK.c @@ -84,6 +84,7 @@ #if defined(SCO) || defined(__USLC__) #include <stdint.h> /* For SIZE_MAX */ #endif +#include <sys/types.h> #include <limits.h> #ifndef SIZE_MAX # ifdef ULONG_MAX @@ -94,14 +95,14 @@ #endif #ifdef HAS_STRLCAT -# define STRLCAT(dst, src, dstsize) { \ +# define STRLCAT(dst, src, dstsize) do { \ if (strlcat(dst, src, dstsize) >= (dstsize)) \ - return (TCL_ERROR); } /* File invalid */ + return (TCL_ERROR); } while(0) /* File invalid */ #else -# define STRLCAT(dst, src, dstsize) { \ +# define STRLCAT(dst, src, dstsize) do { \ if ((strlen(dst) + strlen(src)) < (dstsize)) \ strcat(dst, src); \ - else return (TCL_ERROR); } /* File invalid */ + else return (TCL_ERROR); } while(0) /* File invalid */ #endif /* Smalltalk call-ins */ @@ -449,7 +450,7 @@ n--; mdata->cptr--; - return (n); + return (n); /* this returns bytes read + 1 */ } /* @@ -485,7 +486,7 @@ int xpmParseHeader (XpmData * mdata) { - char buf[BUFSIZ + 1]; + char buf[BUFSIZ + 1] = {0}; int l, n = 0; mdata->Bos = '\0'; @@ -757,7 +758,7 @@ xpmFreeColorTable (colorTable, ncolors); return (TCL_ERROR); /* File invalid */ } - len = strlen (curbuf) + 1; + len = strlen (curbuf) + 1; /* integer overflow just theoretically possible */ s = defaults[curkey] = (char *) malloc (len); if (!s) { @@ -817,7 +818,7 @@ memcpy(s, curbuf, len); color->c_color = s; *curbuf = '\0'; /* reset curbuf */ - if (a < ncolors - 1) + if (a < ncolors - 1) /* can we trust ncolors -> leave data's bounds */ xpmNextString (data); /* get to the next string */ } } @@ -867,10 +868,10 @@ unsigned int ncolors, unsigned int cpp, XpmColor * colorTable, unsigned int **pixels) { - unsigned int *iptr, *iptr2; + unsigned int *iptr, *iptr2 = NULL; /* found by Egbert Eich */ unsigned int a, x, y; - if ((height > 0 && width >= SIZE_MAX / height) || + if ((height > 0 && width >= UINT_MAX / height) || width * height >= UINT_MAX / sizeof(unsigned int)) return (TCL_ERROR); /* No memory */ iptr2 = (unsigned int *) malloc (sizeof (unsigned int) * width * height); @@ -886,8 +887,10 @@ { unsigned int colrgb[256]; - if (ncolors > 256) + if (ncolors > 256) { + free(iptr2); /* found by Egbert Eich */ return (TCL_ERROR); /* File invalid */ + } memset (colrgb, 0, 256 * sizeof (int)); for (a = 0; a < 256; a++) @@ -918,8 +921,12 @@ { /* free all allocated pointers at all exits */ -#define FREE_CRGB {int f; for (f = 0; f < 256; f++) \ -if (crgb[f]) free(crgb[f]);} +#define FREE_CRGB \ +do \ +{ \ + int f; for (f = 0; f < 256; f++) \ + if (crgb[f]) free(crgb[f]); \ +} while(0) /* array of pointers malloced by need */ unsigned int *crgb[256]; @@ -969,6 +976,7 @@ break; default: /* Long color names */ + free(iptr2); /* found by Egbert Eich */ return (TCL_ERROR); /* Not supported */ } *pixels = iptr2;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor