avifil32: Fix EditStreamSetInfo wine checks.
This commit is contained in:
parent
bb9a6ea2b0
commit
ee706d3d68
|
@ -2150,9 +2150,7 @@ HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi,
|
||||||
|
|
||||||
TRACE("(%p,%p,%d)\n", pstream, asi, size);
|
TRACE("(%p,%p,%d)\n", pstream, asi, size);
|
||||||
|
|
||||||
if (pstream == NULL)
|
if (size >= 0 && size < sizeof(AVISTREAMINFOA))
|
||||||
return AVIERR_BADHANDLE;
|
|
||||||
if ((DWORD)size < sizeof(AVISTREAMINFOA))
|
|
||||||
return AVIERR_BADSIZE;
|
return AVIERR_BADSIZE;
|
||||||
|
|
||||||
memcpy(&asiw, asi, sizeof(asiw) - sizeof(asiw.szName));
|
memcpy(&asiw, asi, sizeof(asiw) - sizeof(asiw.szName));
|
||||||
|
@ -2173,6 +2171,9 @@ HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi,
|
||||||
|
|
||||||
TRACE("(%p,%p,%d)\n", pstream, asi, size);
|
TRACE("(%p,%p,%d)\n", pstream, asi, size);
|
||||||
|
|
||||||
|
if (size >= 0 && size < sizeof(AVISTREAMINFOA))
|
||||||
|
return AVIERR_BADSIZE;
|
||||||
|
|
||||||
hr = IAVIStream_QueryInterface(pstream, &IID_IAVIEditStream,(LPVOID*)&pEdit);
|
hr = IAVIStream_QueryInterface(pstream, &IID_IAVIEditStream,(LPVOID*)&pEdit);
|
||||||
if (SUCCEEDED(hr) && pEdit != NULL) {
|
if (SUCCEEDED(hr) && pEdit != NULL) {
|
||||||
hr = IAVIEditStream_SetInfo(pEdit, asi, size);
|
hr = IAVIEditStream_SetInfo(pEdit, asi, size);
|
||||||
|
|
|
@ -775,23 +775,15 @@ static HRESULT WINAPI IAVIEditStream_fnSetInfo(IAVIEditStream*iface,
|
||||||
TRACE("(%p,%p,%d)\n",iface,asi,size);
|
TRACE("(%p,%p,%d)\n",iface,asi,size);
|
||||||
|
|
||||||
/* check parameters */
|
/* check parameters */
|
||||||
if (asi == NULL)
|
if (size >= 0 && size < sizeof(AVISTREAMINFOW))
|
||||||
return AVIERR_BADPARAM;
|
|
||||||
if (size != sizeof(AVISTREAMINFOW))
|
|
||||||
return AVIERR_BADSIZE;
|
return AVIERR_BADSIZE;
|
||||||
if (asi->dwScale == 0 || asi->dwRate == 0 || (LONG)asi->dwQuality < -1 ||
|
|
||||||
asi->dwQuality > ICQUALITY_HIGH)
|
|
||||||
return AVIERR_ERROR;
|
|
||||||
|
|
||||||
This->sInfo.wLanguage = asi->wLanguage;
|
This->sInfo.wLanguage = asi->wLanguage;
|
||||||
This->sInfo.wPriority = asi->wPriority;
|
This->sInfo.wPriority = asi->wPriority;
|
||||||
This->sInfo.dwStart = asi->dwStart;
|
This->sInfo.dwStart = asi->dwStart;
|
||||||
if (asi->dwRate != 0)
|
This->sInfo.dwRate = asi->dwRate;
|
||||||
This->sInfo.dwRate = asi->dwRate;
|
This->sInfo.dwScale = asi->dwScale;
|
||||||
if (asi->dwScale != 0)
|
This->sInfo.dwQuality = asi->dwQuality;
|
||||||
This->sInfo.dwScale = asi->dwScale;
|
|
||||||
if (asi->dwQuality <= ICQUALITY_HIGH)
|
|
||||||
This->sInfo.dwQuality = ICQUALITY_HIGH;
|
|
||||||
CopyRect(&This->sInfo.rcFrame, &asi->rcFrame);
|
CopyRect(&This->sInfo.rcFrame, &asi->rcFrame);
|
||||||
memcpy(This->sInfo.szName, asi->szName, sizeof(asi->szName));
|
memcpy(This->sInfo.szName, asi->szName, sizeof(asi->szName));
|
||||||
This->sInfo.dwEditCount++;
|
This->sInfo.dwEditCount++;
|
||||||
|
|
|
@ -194,11 +194,11 @@ static void test_AVISaveOptions(void)
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
hres = EditStreamSetNameA(streams[0], winetest0);
|
hres = EditStreamSetNameA(streams[0], winetest0);
|
||||||
todo_wine ok(hres == AVIERR_OK, "0: got 0x%x (expected AVIERR_OK)\n", hres);
|
ok(hres == AVIERR_OK, "0: got 0x%x (expected AVIERR_OK)\n", hres);
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
hres = EditStreamSetNameA(streams[1], winetest1);
|
hres = EditStreamSetNameA(streams[1], winetest1);
|
||||||
todo_wine ok(hres == AVIERR_OK, "1: got 0x%x (expected AVIERR_OK)\n", hres);
|
ok(hres == AVIERR_OK, "1: got 0x%x (expected AVIERR_OK)\n", hres);
|
||||||
|
|
||||||
if (winetest_interactive) {
|
if (winetest_interactive) {
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
|
@ -223,6 +223,103 @@ static void test_AVISaveOptions(void)
|
||||||
|
|
||||||
/* ########################### */
|
/* ########################### */
|
||||||
|
|
||||||
|
static void test_EditStreamSetInfo(void)
|
||||||
|
{
|
||||||
|
PAVISTREAM stream = NULL;
|
||||||
|
HRESULT hres;
|
||||||
|
AVISTREAMINFO info, info2;
|
||||||
|
|
||||||
|
hres = CreateEditableStream(&stream, NULL);
|
||||||
|
ok(hres == AVIERR_OK, "got 0x%08X, expected AVIERR_OK\n", hres);
|
||||||
|
|
||||||
|
|
||||||
|
if(0) /* Crashing - first parameter not checked */
|
||||||
|
hres = EditStreamSetInfo(NULL, &info, sizeof(AVISTREAMINFO) );
|
||||||
|
|
||||||
|
/* Size parameter is somehow checked (notice the crash with size=-1 below) */
|
||||||
|
hres = EditStreamSetInfo(stream, NULL, 0);
|
||||||
|
ok( hres == AVIERR_BADSIZE, "got 0x%08X, expected AVIERR_BADSIZE\n", hres);
|
||||||
|
|
||||||
|
hres = EditStreamSetInfo(stream, NULL, sizeof(AVISTREAMINFO)-1 );
|
||||||
|
ok( hres == AVIERR_BADSIZE, "got 0x%08X, expected AVIERR_BADSIZE\n", hres);
|
||||||
|
|
||||||
|
if(0)
|
||||||
|
{ /* Crashing - second parameter not checked */
|
||||||
|
hres = EditStreamSetInfo(stream, NULL, sizeof(AVISTREAMINFO) );
|
||||||
|
|
||||||
|
hres = EditStreamSetInfo(stream, NULL, -1);
|
||||||
|
ok( hres == AVIERR_BADSIZE, "got 0x%08X, expected AVIERR_BADSIZE\n", hres);
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = AVIStreamInfo(stream, &info, sizeof(AVISTREAMINFO) );
|
||||||
|
ok( hres == 0, "got 0x%08X, expected 0\n", hres);
|
||||||
|
|
||||||
|
/* Does the function check what's it's updating ? */
|
||||||
|
|
||||||
|
#define IS_INFO_UPDATED(m) do { \
|
||||||
|
hres = EditStreamSetInfo(stream, &info, sizeof(AVISTREAMINFO) ); \
|
||||||
|
ok( hres == 0, "got 0x%08X, expected 0\n", hres); \
|
||||||
|
hres = AVIStreamInfo(stream, &info2, sizeof(AVISTREAMINFO) ); \
|
||||||
|
ok( hres == 0, "got 0x%08X, expected 0\n", hres); \
|
||||||
|
ok( info2.m == info.m, "EditStreamSetInfo did not update "#m" parameter\n" ); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
info.dwStart++;
|
||||||
|
IS_INFO_UPDATED(dwStart);
|
||||||
|
info.dwStart = 0;
|
||||||
|
IS_INFO_UPDATED(dwStart);
|
||||||
|
|
||||||
|
info.wPriority++;
|
||||||
|
IS_INFO_UPDATED(wPriority);
|
||||||
|
info.wPriority = 0;
|
||||||
|
IS_INFO_UPDATED(wPriority);
|
||||||
|
|
||||||
|
info.wLanguage++;
|
||||||
|
IS_INFO_UPDATED(wLanguage);
|
||||||
|
info.wLanguage = 0;
|
||||||
|
IS_INFO_UPDATED(wLanguage);
|
||||||
|
|
||||||
|
info.dwScale++;
|
||||||
|
IS_INFO_UPDATED(dwScale);
|
||||||
|
info.dwScale = 0;
|
||||||
|
IS_INFO_UPDATED(dwScale);
|
||||||
|
|
||||||
|
info.dwRate++;
|
||||||
|
IS_INFO_UPDATED(dwRate);
|
||||||
|
info.dwRate = 0;
|
||||||
|
IS_INFO_UPDATED(dwRate);
|
||||||
|
|
||||||
|
info.dwQuality++;
|
||||||
|
IS_INFO_UPDATED(dwQuality);
|
||||||
|
info.dwQuality = 0;
|
||||||
|
IS_INFO_UPDATED(dwQuality);
|
||||||
|
info.dwQuality = -2;
|
||||||
|
IS_INFO_UPDATED(dwQuality);
|
||||||
|
info.dwQuality = ICQUALITY_HIGH+1;
|
||||||
|
IS_INFO_UPDATED(dwQuality);
|
||||||
|
|
||||||
|
info.rcFrame.left = 0;
|
||||||
|
IS_INFO_UPDATED(rcFrame.left);
|
||||||
|
info.rcFrame.top = 0;
|
||||||
|
IS_INFO_UPDATED(rcFrame.top);
|
||||||
|
info.rcFrame.right = 0;
|
||||||
|
IS_INFO_UPDATED(rcFrame.right);
|
||||||
|
info.rcFrame.bottom = 0;
|
||||||
|
IS_INFO_UPDATED(rcFrame.bottom);
|
||||||
|
|
||||||
|
info.rcFrame.left = -1;
|
||||||
|
IS_INFO_UPDATED(rcFrame.left);
|
||||||
|
info.rcFrame.top = -1;
|
||||||
|
IS_INFO_UPDATED(rcFrame.top);
|
||||||
|
info.rcFrame.right = -1;
|
||||||
|
IS_INFO_UPDATED(rcFrame.right);
|
||||||
|
info.rcFrame.bottom = -1;
|
||||||
|
IS_INFO_UPDATED(rcFrame.bottom);
|
||||||
|
AVIStreamRelease(stream);
|
||||||
|
#undef IS_INFO_UPDATED
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void init_test_struct(COMMON_AVI_HEADERS *cah)
|
static void init_test_struct(COMMON_AVI_HEADERS *cah)
|
||||||
{
|
{
|
||||||
memcpy(cah->fh, deffh, sizeof(deffh));
|
memcpy(cah->fh, deffh, sizeof(deffh));
|
||||||
|
@ -451,6 +548,7 @@ START_TEST(api)
|
||||||
{
|
{
|
||||||
|
|
||||||
AVIFileInit();
|
AVIFileInit();
|
||||||
|
test_EditStreamSetInfo();
|
||||||
test_AVISaveOptions();
|
test_AVISaveOptions();
|
||||||
test_default_data();
|
test_default_data();
|
||||||
test_amh_corruption();
|
test_amh_corruption();
|
||||||
|
|
Loading…
Reference in New Issue