On Thu, May 20, 2010 at 12:36:21PM +0200, Michael Stefaniuc wrote: > 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().
Yes, they do. Ciao, Marcus