- fix MsiSummaryInfoGetProperty to return ERROR_MORE_DATA if the

buffer is too small (based on a patch by Aric Stewart)
- add a test case to show correct behaviour
This commit is contained in:
Mike McCormack 2005-09-06 10:23:12 +00:00 committed by Alexandre Julliard
parent 575b4116b5
commit 0867e48d5f
2 changed files with 24 additions and 5 deletions

View File

@ -544,6 +544,7 @@ static UINT get_prop( MSIHANDLE handle, UINT uiProperty, UINT *puiDataType,
{
MSISUMMARYINFO *si;
PROPVARIANT *prop;
UINT ret = ERROR_SUCCESS;
TRACE("%ld %d %p %p %p %p %p\n", handle, uiProperty, puiDataType,
piValue, pftValue, str, pcchValueBuf);
@ -583,6 +584,8 @@ static UINT get_prop( MSIHANDLE handle, UINT uiProperty, UINT *puiDataType,
if( str->str.a )
lstrcpynA(str->str.a, prop->u.pszVal, *pcchValueBuf );
}
if (len >= *pcchValueBuf)
ret = ERROR_MORE_DATA;
*pcchValueBuf = len;
}
break;
@ -597,7 +600,7 @@ static UINT get_prop( MSIHANDLE handle, UINT uiProperty, UINT *puiDataType,
break;
}
msiobj_release( &si->hdr );
return ERROR_SUCCESS;
return ret;
}
UINT WINAPI MsiSummaryInfoGetPropertyA(

View File

@ -67,7 +67,7 @@ START_TEST(suminfo)
const char *msifile = "winetest.msi";
MSIHANDLE hdb = 0, hsuminfo;
UINT r, count, type;
DWORD dwcount;
DWORD sz;
INT val;
FILETIME ft;
char buf[0x10];
@ -112,11 +112,11 @@ START_TEST(suminfo)
buf[0]='x';
buf[1]=0;
dwcount = 0x10;
r = MsiSummaryInfoGetProperty(hsuminfo, PID_REVNUMBER, &type, &val, NULL, buf, &dwcount);
sz = 0x10;
r = MsiSummaryInfoGetProperty(hsuminfo, PID_REVNUMBER, &type, &val, NULL, buf, &sz);
ok(r == ERROR_SUCCESS, "getpropcount failed\n");
ok(buf[0]=='x', "cleared buffer\n");
ok(dwcount == 0x10, "count wasn't zero\n");
ok(sz == 0x10, "count wasn't zero\n");
ok(type == VT_EMPTY, "should be empty\n");
r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 0, NULL, "Mike");
@ -177,6 +177,22 @@ START_TEST(suminfo)
r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 0, NULL, "Mike");
ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty failed\n");
sz = 2;
strcpy(buf,"x");
r = MsiSummaryInfoGetProperty(hsuminfo, PID_TITLE, &type, NULL, NULL, buf, &sz );
ok(r == ERROR_MORE_DATA, "MsiSummaryInfoSetProperty failed\n");
ok(sz == 4, "count was wrong\n");
ok(type == VT_LPSTR, "type was wrong\n");
ok(!strcmp(buf,"M"), "buffer was wrong\n");
sz = 4;
strcpy(buf,"x");
r = MsiSummaryInfoGetProperty(hsuminfo, PID_TITLE, &type, NULL, NULL, buf, &sz );
ok(r == ERROR_MORE_DATA, "MsiSummaryInfoSetProperty failed\n");
ok(sz == 4, "count was wrong\n");
ok(type == VT_LPSTR, "type was wrong\n");
ok(!strcmp(buf,"Mik"), "buffer was wrong\n");
r = MsiSummaryInfoSetProperty(hsuminfo, PID_TITLE, VT_LPSTR, 0, NULL, "JungAh");
ok(r == ERROR_SUCCESS, "MsiSummaryInfoSetProperty failed\n");