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