rrproviderproperty.c: free newly allocated prop in more error paths
Reported by parfait 1.0: Error: Memory leak (CWE 401) Memory leak of pointer 'prop' allocated with RRCreateProviderProperty(property) at line 221 of randr/rrproviderproperty.c in function 'RRChangeProviderProperty'. 'prop' allocated at line 155 with RRCreateProviderProperty(property). prop leaks when pending != 0 at line 161. Error: Memory leak (CWE 401) Memory leak of pointer 'prop' allocated with RRCreateProviderProperty(property) at line 345 of randr/rrproviderproperty.c in function 'RRConfigureProviderProperty'. 'prop' allocated at line 333 with RRCreateProviderProperty(property). at line 349 of randr/rrproviderproperty.c in function 'RRConfigureProviderProperty'. 'prop' allocated at line 333 with RRCreateProviderProperty(property). Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
94b514d5e4
commit
42e655de4d
|
@ -216,6 +216,8 @@ RRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type,
|
||||||
if (pending && pScrPriv->rrProviderSetProperty &&
|
if (pending && pScrPriv->rrProviderSetProperty &&
|
||||||
!pScrPriv->rrProviderSetProperty(provider->pScreen, provider,
|
!pScrPriv->rrProviderSetProperty(provider->pScreen, provider,
|
||||||
prop->propertyName, &new_value)) {
|
prop->propertyName, &new_value)) {
|
||||||
|
if (add)
|
||||||
|
RRDestroyProviderProperty(prop);
|
||||||
free(new_value.data);
|
free(new_value.data);
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
|
@ -342,12 +344,18 @@ RRConfigureProviderProperty(RRProviderPtr provider, Atom property,
|
||||||
/*
|
/*
|
||||||
* ranges must have even number of values
|
* ranges must have even number of values
|
||||||
*/
|
*/
|
||||||
if (range && (num_values & 1))
|
if (range && (num_values & 1)) {
|
||||||
|
if (add)
|
||||||
|
RRDestroyProviderProperty(prop);
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
|
}
|
||||||
|
|
||||||
new_values = malloc(num_values * sizeof(INT32));
|
new_values = malloc(num_values * sizeof(INT32));
|
||||||
if (!new_values && num_values)
|
if (!new_values && num_values) {
|
||||||
|
if (add)
|
||||||
|
RRDestroyProviderProperty(prop);
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
|
}
|
||||||
if (num_values)
|
if (num_values)
|
||||||
memcpy(new_values, values, num_values * sizeof(INT32));
|
memcpy(new_values, values, num_values * sizeof(INT32));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue