Commit 59774af8 authored by Daniel Stone's avatar Daniel Stone
Browse files

XKB: Remove usage of alloca

alloca has no way to return failure, and instead can possibly arbitrarily
overflow the stack.  Let's avoid that one.
parent 6e4f5cf8
......@@ -1312,7 +1312,7 @@ unsigned i,len;
char *desc,*start;
len= (rep->length*4)-(SIZEOF(xkbGetMapReply)-SIZEOF(xGenericReply));
start= desc= (char *)ALLOCATE_LOCAL(len);
start= desc= (char *)xalloc(len);
if (!start)
return BadAlloc;
if ( rep->nTypes>0 )
......@@ -1352,7 +1352,7 @@ char *desc,*start;
}
WriteToClient(client, (i=SIZEOF(xkbGetMapReply)), (char *)rep);
WriteToClient(client, len, start);
DEALLOCATE_LOCAL((char *)start);
xfree((char *)start);
return client->noClientException;
}
......@@ -2499,7 +2499,7 @@ int size;
size= rep->length*4;
if (size>0) {
data = (char *)ALLOCATE_LOCAL(size);
data = (char *)xalloc(size);
if (data) {
register unsigned i,bit;
xkbModsWireDesc * grp;
......@@ -2550,7 +2550,7 @@ int size;
WriteToClient(client, SIZEOF(xkbGetCompatMapReply), (char *)rep);
if (data) {
WriteToClient(client, size, data);
DEALLOCATE_LOCAL((char *)data);
xfree((char *)data);
}
return client->noClientException;
}
......@@ -2801,7 +2801,7 @@ register unsigned bit;
length = rep->length*4;
if (length>0) {
CARD8 *to;
to= map= (CARD8 *)ALLOCATE_LOCAL(length);
to= map= (CARD8 *)xalloc(length);
if (map) {
xkbIndicatorMapWireDesc *wire = (xkbIndicatorMapWireDesc *)to;
for (i=0,bit=1;i<XkbNumIndicators;i++,bit<<=1) {
......@@ -2840,7 +2840,7 @@ register unsigned bit;
WriteToClient(client, SIZEOF(xkbGetIndicatorMapReply), (char *)rep);
if (map) {
WriteToClient(client, length, (char *)map);
DEALLOCATE_LOCAL((char *)map);
xfree((char *)map);
}
return client->noClientException;
}
......@@ -3292,7 +3292,7 @@ register int n;
swapl(&rep->indicators,n);
}
start = desc = (char *)ALLOCATE_LOCAL(length);
start = desc = (char *)xalloc(length);
if ( !start )
return BadAlloc;
if (xkb->names) {
......@@ -3416,7 +3416,7 @@ register int n;
}
WriteToClient(client, SIZEOF(xkbGetNamesReply), (char *)rep);
WriteToClient(client, length, start);
DEALLOCATE_LOCAL((char *)start);
xfree((char *)start);
return client->noClientException;
}
......@@ -4314,7 +4314,7 @@ XkbSendGeometry( ClientPtr client,
if (geom!=NULL) {
len= rep->length*4;
start= desc= (char *)ALLOCATE_LOCAL(len);
start= desc= (char *)xalloc(len);
if (!start)
return BadAlloc;
desc= XkbWriteCountedString(desc,geom->label_font,client->swapped);
......@@ -4358,7 +4358,7 @@ XkbSendGeometry( ClientPtr client,
if (len>0)
WriteToClient(client, len, start);
if (start!=NULL)
DEALLOCATE_LOCAL((char *)start);
xfree((char *)start);
if (freeGeom)
XkbFreeGeometry(geom,XkbGeomAllMask,True);
return client->noClientException;
......@@ -5758,12 +5758,12 @@ char * str;
}
WriteToClient(client,SIZEOF(xkbGetDeviceInfoReply), (char *)&rep);
str= (char*) ALLOCATE_LOCAL(nameLen);
str= (char*) xalloc(nameLen);
if (!str)
return BadAlloc;
XkbWriteCountedString(str,dev->name,client->swapped);
WriteToClient(client,nameLen,str);
DEALLOCATE_LOCAL(str);
xfree(str);
length-= nameLen;
if (rep.nBtnsRtrn>0) {
......
......@@ -182,7 +182,7 @@ char * pval;
ErrorF("Atom error: %s not created\n",_XKB_RF_NAMES_PROP_ATOM);
return True;
}
pval= (char*) ALLOCATE_LOCAL(len);
pval= (char*) xalloc(len);
if (!pval) {
ErrorF("Allocation error: %s proprerty not created\n",
_XKB_RF_NAMES_PROP_ATOM);
......@@ -223,7 +223,7 @@ char * pval;
}
ChangeWindowProperty(WindowTable[0],name,XA_STRING,8,PropModeReplace,
len,pval,True);
DEALLOCATE_LOCAL(pval);
xfree(pval);
return True;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment