msi:MsiGetUserInfo fix
Aric Stewart
aric at codeweavers.com
Thu Apr 12 00:46:43 CDT 2007
do not crash if org, user or serial are not present. instead return the
correct USERINFOSTATE_ABSENT value.
fixes a crash with excel viewer 2003
---
dlls/msi/msi.c | 32 +++++++++++++++++++++++---------
1 files changed, 23 insertions(+), 9 deletions(-)
-------------- next part --------------
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c
index 2cb4848..9887fbe 100644
--- a/dlls/msi/msi.c
+++ b/dlls/msi/msi.c
@@ -1562,15 +1562,29 @@ static USERINFOSTATE WINAPI MSI_GetUserI
state = USERINFOSTATE_PRESENT;
- r = msi_strcpy_to_awstring( user, lpUserNameBuf, pcchUserNameBuf );
- if (r == ERROR_MORE_DATA)
- state = USERINFOSTATE_MOREDATA;
- r = msi_strcpy_to_awstring( org, lpOrgNameBuf, pcchOrgNameBuf );
- if (r == ERROR_MORE_DATA)
- state = USERINFOSTATE_MOREDATA;
- r = msi_strcpy_to_awstring( serial, lpSerialBuf, pcchSerialBuf );
- if (r == ERROR_MORE_DATA)
- state = USERINFOSTATE_MOREDATA;
+ if (user)
+ {
+ r = msi_strcpy_to_awstring( user, lpUserNameBuf, pcchUserNameBuf );
+ if (r == ERROR_MORE_DATA)
+ state = USERINFOSTATE_MOREDATA;
+ }
+ else
+ state = USERINFOSTATE_ABSENT;
+ if (org)
+ {
+ r = msi_strcpy_to_awstring( org, lpOrgNameBuf, pcchOrgNameBuf );
+ if (r == ERROR_MORE_DATA && state == USERINFOSTATE_PRESENT)
+ state = USERINFOSTATE_MOREDATA;
+ }
+ /* msdn states: The user information is considered to be present even in the absence of a company name. */
+ if (serial)
+ {
+ r = msi_strcpy_to_awstring( serial, lpSerialBuf, pcchSerialBuf );
+ if (r == ERROR_MORE_DATA && state == USERINFOSTATE_PRESENT)
+ state = USERINFOSTATE_MOREDATA;
+ }
+ else
+ state = USERINFOSTATE_ABSENT;
msi_free( user );
msi_free( org );
More information about the wine-patches
mailing list