Coverity #340: Fix potential NULL dereference. Clean up proliferation of

'register int n' in loops of ProcXkbGetNames.
This commit is contained in:
Daniel Stone 2006-04-09 17:39:10 +00:00
parent f324be00c5
commit 1357af2474
2 changed files with 119 additions and 120 deletions

View File

@ -9,6 +9,10 @@
* xkb/XKBMAlloc.c: * xkb/XKBMAlloc.c:
Coverity #324: Fix potential NULL dereference. (Alan Coopersmith) Coverity #324: Fix potential NULL dereference. (Alan Coopersmith)
* xkb/xkb.c:
Coverity #340: Fix potential NULL dereference.
Clean up proliferation of 'register int n' in loops of ProcXkbGetNames.
2006-04-07 Aaron Plattner <aplattner@nvidia.com> 2006-04-07 Aaron Plattner <aplattner@nvidia.com>
* hw/xfree86/common/xf86Module.h: * hw/xfree86/common/xf86Module.h:

235
xkb/xkb.c
View File

@ -3121,7 +3121,8 @@ ProcXkbSetNamedIndicator(ClientPtr client)
if (!stuff->createMap) if (!stuff->createMap)
return client->noClientException; return client->noClientException;
for (led=0,map=NULL;(led<XkbNumIndicators)&&(map==NULL);led++) { for (led=0,map=NULL;(led<XkbNumIndicators)&&(map==NULL);led++) {
if ((sli->names[led]==None)&&(!XkbIM_InUse(&sli->maps[led]))) { if ((sli->names)&&(sli->leds)&&(sli->names[led]==None)&&
(!XkbIM_InUse(&sli->maps[led]))) {
map= &sli->maps[led]; map= &sli->maps[led];
sli->names[led]= stuff->indicator; sli->names[led]= stuff->indicator;
break; break;
@ -3317,11 +3318,11 @@ XkbSendNames(ClientPtr client,XkbDescPtr xkb,xkbGetNamesReply *rep)
register unsigned i,length,which; register unsigned i,length,which;
char * start; char * start;
char * desc; char * desc;
register int n;
length= rep->length*4; length= rep->length*4;
which= rep->which; which= rep->which;
if (client->swapped) { if (client->swapped) {
register int n;
swaps(&rep->sequenceNumber,n); swaps(&rep->sequenceNumber,n);
swapl(&rep->length,n); swapl(&rep->length,n);
swapl(&rep->which,n); swapl(&rep->which,n);
@ -3332,127 +3333,121 @@ char * desc;
start = desc = (char *)ALLOCATE_LOCAL(length); start = desc = (char *)ALLOCATE_LOCAL(length);
if ( !start ) if ( !start )
return BadAlloc; return BadAlloc;
if (which&XkbKeycodesNameMask) { if (xkb->names) {
*((CARD32 *)desc)= xkb->names->keycodes; if (which&XkbKeycodesNameMask) {
if (client->swapped) { *((CARD32 *)desc)= xkb->names->keycodes;
register int n; if (client->swapped) {
swapl(desc,n); swapl(desc,n);
} }
desc+= 4; desc+= 4;
} }
if (which&XkbGeometryNameMask) { if (which&XkbGeometryNameMask) {
*((CARD32 *)desc)= xkb->names->geometry; *((CARD32 *)desc)= xkb->names->geometry;
if (client->swapped) { if (client->swapped) {
register int n; swapl(desc,n);
swapl(desc,n); }
} desc+= 4;
desc+= 4; }
} if (which&XkbSymbolsNameMask) {
if (which&XkbSymbolsNameMask) { *((CARD32 *)desc)= xkb->names->symbols;
*((CARD32 *)desc)= xkb->names->symbols; if (client->swapped) {
if (client->swapped) { swapl(desc,n);
register int n; }
swapl(desc,n); desc+= 4;
} }
desc+= 4; if (which&XkbPhysSymbolsNameMask) {
} register CARD32 *atm= (CARD32 *)desc;
if (which&XkbPhysSymbolsNameMask) { atm[0]= (CARD32)xkb->names->phys_symbols;
register CARD32 *atm= (CARD32 *)desc; if (client->swapped) {
atm[0]= (CARD32)xkb->names->phys_symbols; swapl(&atm[0],n);
if (client->swapped) { }
register int n; desc+= 4;
swapl(&atm[0],n); }
} if (which&XkbTypesNameMask) {
desc+= 4; *((CARD32 *)desc)= (CARD32)xkb->names->types;
} if (client->swapped) {
if (which&XkbTypesNameMask) { swapl(desc,n);
*((CARD32 *)desc)= (CARD32)xkb->names->types; }
if (client->swapped) { desc+= 4;
register int n; }
swapl(desc,n); if (which&XkbCompatNameMask) {
} *((CARD32 *)desc)= (CARD32)xkb->names->compat;
desc+= 4; if (client->swapped) {
} swapl(desc,n);
if (which&XkbCompatNameMask) { }
*((CARD32 *)desc)= (CARD32)xkb->names->compat; desc+= 4;
if (client->swapped) { }
register int n; if (which&XkbKeyTypeNamesMask) {
swapl(desc,n); register CARD32 *atm= (CARD32 *)desc;
} register XkbKeyTypePtr type= xkb->map->types;
desc+= 4;
}
if (which&XkbKeyTypeNamesMask) {
register CARD32 *atm= (CARD32 *)desc;
register XkbKeyTypePtr type= xkb->map->types;
for (i=0;i<xkb->map->num_types;i++,atm++,type++) { for (i=0;i<xkb->map->num_types;i++,atm++,type++) {
*atm= (CARD32)type->name; *atm= (CARD32)type->name;
if (client->swapped) { if (client->swapped) {
register int n; swapl(atm,n);
swapl(atm,n); }
} }
} desc= (char *)atm;
desc= (char *)atm; }
} if (which&XkbKTLevelNamesMask && xkb->map) {
if (which&XkbKTLevelNamesMask) { XkbKeyTypePtr type = xkb->map->types;
XkbKeyTypePtr type = xkb->map->types; register CARD32 *atm;
register CARD32 *atm; for (i=0;i<rep->nTypes;i++,type++) {
for (i=0;i<rep->nTypes;i++,type++) { *desc++ = type->num_levels;
*desc++ = type->num_levels; }
} desc+= XkbPaddedSize(rep->nTypes)-rep->nTypes;
desc+= XkbPaddedSize(rep->nTypes)-rep->nTypes;
atm= (CARD32 *)desc; atm= (CARD32 *)desc;
type = xkb->map->types; type = xkb->map->types;
for (i=0;i<xkb->map->num_types;i++,type++) { for (i=0;i<xkb->map->num_types;i++,type++) {
register unsigned l; register unsigned l;
if (type->level_names) { if (type->level_names) {
for (l=0;l<type->num_levels;l++,atm++) { for (l=0;l<type->num_levels;l++,atm++) {
*atm= type->level_names[l]; *atm= type->level_names[l];
if (client->swapped) { if (client->swapped) {
register unsigned n; swapl(atm,n);
swapl(atm,n); }
} }
} desc+= type->num_levels*4;
desc+= type->num_levels*4; }
} }
} }
} if (which&XkbIndicatorNamesMask) {
if (which&XkbIndicatorNamesMask) { desc= _XkbWriteAtoms(desc,xkb->names->indicators,XkbNumIndicators,
desc= _XkbWriteAtoms(desc,xkb->names->indicators,XkbNumIndicators, client->swapped);
client->swapped); }
} if (which&XkbVirtualModNamesMask) {
if (which&XkbVirtualModNamesMask) { desc= _XkbWriteAtoms(desc,xkb->names->vmods,XkbNumVirtualMods,
desc= _XkbWriteAtoms(desc,xkb->names->vmods,XkbNumVirtualMods, client->swapped);
client->swapped); }
} if (which&XkbGroupNamesMask) {
if (which&XkbGroupNamesMask) { desc= _XkbWriteAtoms(desc,xkb->names->groups,XkbNumKbdGroups,
desc= _XkbWriteAtoms(desc,xkb->names->groups,XkbNumKbdGroups, client->swapped);
client->swapped); }
} if (which&XkbKeyNamesMask) {
if (which&XkbKeyNamesMask) { for (i=0;i<rep->nKeys;i++,desc+= sizeof(XkbKeyNameRec)) {
for (i=0;i<rep->nKeys;i++,desc+= sizeof(XkbKeyNameRec)) { *((XkbKeyNamePtr)desc)= xkb->names->keys[i+rep->firstKey];
*((XkbKeyNamePtr)desc)= xkb->names->keys[i+rep->firstKey]; }
} }
} if (which&XkbKeyAliasesMask) {
if (which&XkbKeyAliasesMask) { XkbKeyAliasPtr pAl;
XkbKeyAliasPtr pAl; pAl= xkb->names->key_aliases;
pAl= xkb->names->key_aliases; for (i=0;i<rep->nKeyAliases;i++,pAl++,desc+=2*XkbKeyNameLength) {
for (i=0;i<rep->nKeyAliases;i++,pAl++,desc+=2*XkbKeyNameLength) { *((XkbKeyAliasPtr)desc)= *pAl;
*((XkbKeyAliasPtr)desc)= *pAl; }
} }
} if ((which&XkbRGNamesMask)&&(rep->nRadioGroups>0)) {
if ((which&XkbRGNamesMask)&&(rep->nRadioGroups>0)) { register CARD32 *atm= (CARD32 *)desc;
register CARD32 *atm= (CARD32 *)desc; for (i=0;i<rep->nRadioGroups;i++,atm++) {
for (i=0;i<rep->nRadioGroups;i++,atm++) { *atm= (CARD32)xkb->names->radio_groups[i];
*atm= (CARD32)xkb->names->radio_groups[i]; if (client->swapped) {
if (client->swapped) { swapl(atm,n);
register unsigned n; }
swapl(atm,n); }
} desc+= rep->nRadioGroups*4;
} }
desc+= rep->nRadioGroups*4;
} }
if ((desc-start)!=(length)) { if ((desc-start)!=(length)) {
ErrorF("BOGUS LENGTH in write names, expected %d, got %ld\n", ErrorF("BOGUS LENGTH in write names, expected %d, got %ld\n",
length, (unsigned long)(desc-start)); length, (unsigned long)(desc-start));