diff options
Diffstat (limited to 'nx-X11/lib/src/ParseCol.c')
-rw-r--r-- | nx-X11/lib/src/ParseCol.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/nx-X11/lib/src/ParseCol.c b/nx-X11/lib/src/ParseCol.c index e997b1b8c..fcf906929 100644 --- a/nx-X11/lib/src/ParseCol.c +++ b/nx-X11/lib/src/ParseCol.c @@ -27,6 +27,7 @@ in this Software without prior written authorization from The Open Group. #ifdef HAVE_CONFIG_H #include <config.h> #endif +#include <limits.h> #include <stdio.h> #include "Xlibint.h" #include "Xcmsint.h" @@ -39,7 +40,7 @@ XParseColor ( _Xconst char *spec, XColor *def) { - register int n, i; + register size_t n, i; int r, g, b; char c; XcmsCCC ccc; @@ -47,6 +48,8 @@ XParseColor ( if (!spec) return(0); n = strlen (spec); + if (n >= USHRT_MAX) + return(0); if (*spec == '#') { /* * RGB @@ -61,7 +64,7 @@ XParseColor ( r = g; g = b; b = 0; - for (i = n; --i >= 0; ) { + for (i = 0; i < n; i++) { c = *spec++; b <<= 4; if (c >= '0' && c <= '9') @@ -119,7 +122,7 @@ XParseColor ( LockDisplay(dpy); GetReq (LookupColor, req); req->cmap = cmap; - req->nbytes = n = strlen(spec); + req->nbytes = (CARD16) (n = strlen(spec)); req->length += (n + 3) >> 2; Data (dpy, spec, (long)n); if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) { |