[PATCH 10/11] Replace alloc+strcpy+strcat with Xasprintf calls

Alan Coopersmith alan.coopersmith at oracle.com
Tue Nov 30 15:06:38 PST 2010


Julien Cristau wrote:
> On Mon, Nov 29, 2010 at 20:57:47 -0800, Alan Coopersmith wrote:
> 
>> diff --git a/dix/devices.c b/dix/devices.c
>> index 708860a..db38c1a 100644
>> --- a/dix/devices.c
>> +++ b/dix/devices.c
>> @@ -2524,9 +2524,10 @@ AllocDevicePair (ClientPtr client, char* name,
>>      if (!pointer)
>>          return BadAlloc;
>>  
>> -    pointer->name = calloc(strlen(name) + strlen(" pointer") + 1, sizeof(char));
>> -    strcpy(pointer->name, name);
>> -    strcat(pointer->name, " pointer");
>> +    if (Xasprintf(&pointer->name, "%s pointer", name) == -1) {
>> +        RemoveDevice(pointer, FALSE);
>> +        return BadAlloc;
>> +    }
>>  
> 
> I think you need to set pointer->name to NULL before calling
> RemoveDevice, as that will call CloseDevice which does free(dev->name).
> 
>>      pointer->public.processInputProc = ProcessOtherEvent;
>>      pointer->public.realInputProc = ProcessOtherEvent;
>> @@ -2547,9 +2548,11 @@ AllocDevicePair (ClientPtr client, char* name,
>>          return BadAlloc;
>>      }
>>  
>> -    keyboard->name = calloc(strlen(name) + strlen(" keyboard") + 1, sizeof(char));
>> -    strcpy(keyboard->name, name);
>> -    strcat(keyboard->name, " keyboard");
>> +    if (Xasprintf(&pointer->name, "%s keyboard", name) == -1) {
> 
> &keyboard->name
> 
>> +        RemoveDevice(pointer, FALSE);
>> +        RemoveDevice(keyboard, FALSE);
>> +        return BadAlloc;
>> +    }
>>  
>>      keyboard->public.processInputProc = ProcessOtherEvent;
>>      keyboard->public.realInputProc = ProcessOtherEvent;

Good catches - fixes coming in v2.

-- 
	-Alan Coopersmith-        alan.coopersmith at oracle.com
	 Oracle Solaris Platform Engineering: X Window System



More information about the xorg-devel mailing list