msi: Avoid a potential NULL pointer dereference (coccicheck).

Michael Stefaniuc mstefani at redhat.com
Thu May 20 05:36:21 CDT 2010


Paul Vriens wrote:
> On 05/20/2010 01:15 AM, Michael Stefaniuc wrote:
>> The last "goto done" is for si == NULL. When MSI_GetSummaryInformationW
>> returns NULL there is a crash.
>> ---
>>   dlls/msi/msi.c |    3 ++-
>>   1 files changed, 2 insertions(+), 1 deletions(-)
>>
>> diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c
>> index 3170e6d..9c08d1b 100644
>> --- a/dlls/msi/msi.c
>> +++ b/dlls/msi/msi.c
>> @@ -551,7 +551,8 @@ static UINT MSI_ApplicablePatchW( MSIPACKAGE
>> *package, LPCWSTR patch )
>>
>>   done:
>>       msiobj_release(&patch_db->hdr );
>> -    msiobj_release(&si->hdr );
>> +    if (si)
>> +        msiobj_release(&si->hdr );
>>       return r;
>>   }
>>
> 
> Hi Michael,
> 
> This one is mentioned by Coverity (#970). Marcus marked this one as
> 'FALSE' with the remark:
> 
> "hdr is at position 0, so this will be NULL and msiobj_release handles it."
> 
> Thoughts?

Do the compilers treat the addressof operator on the struct member as
  si + FIELD_OFFSET(MSISUMMARYINFO, hdr)
?
Then yes, no dereference happens and the result of the above calculation
is NULL which is fine as input for msiobj_release().

bye
	michael



More information about the wine-devel mailing list