mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-01 18:58:29 +00:00
dsound: Set position past the end of the buffer is invalid.
This commit is contained in:
parent
9a42affc34
commit
1941a91536
|
@ -574,12 +574,15 @@ static HRESULT WINAPI IDirectSoundBufferImpl_SetCurrentPosition(IDirectSoundBuff
|
||||||
IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer8(iface);
|
IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer8(iface);
|
||||||
HRESULT hres = DS_OK;
|
HRESULT hres = DS_OK;
|
||||||
|
|
||||||
TRACE("(%p,%ld)\n",This,newpos);
|
TRACE("(%p,%lu)\n",This,newpos);
|
||||||
|
|
||||||
|
if (newpos >= This->buflen) {
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
AcquireSRWLockExclusive(&This->lock);
|
AcquireSRWLockExclusive(&This->lock);
|
||||||
|
|
||||||
/* start mixing from this new location instead */
|
/* start mixing from this new location instead */
|
||||||
newpos %= This->buflen;
|
|
||||||
newpos -= newpos%This->pwfx->nBlockAlign;
|
newpos -= newpos%This->pwfx->nBlockAlign;
|
||||||
This->sec_mixpos = newpos;
|
This->sec_mixpos = newpos;
|
||||||
|
|
||||||
|
|
|
@ -919,6 +919,13 @@ static HRESULT test_block_align(LPGUID lpGuid)
|
||||||
rc = IDirectSoundBuffer_GetCurrentPosition(secondary, &pos2, NULL);
|
rc = IDirectSoundBuffer_GetCurrentPosition(secondary, &pos2, NULL);
|
||||||
ok(rc == DS_OK, "Could not get new position: %08lx\n", rc);
|
ok(rc == DS_OK, "Could not get new position: %08lx\n", rc);
|
||||||
ok(pos == pos2, "Positions not the same! Old position: %ld, new position: %ld\n", pos, pos2);
|
ok(pos == pos2, "Positions not the same! Old position: %ld, new position: %ld\n", pos, pos2);
|
||||||
|
|
||||||
|
/* Set position to past the end of the buffer */
|
||||||
|
rc = IDirectSoundBuffer_SetCurrentPosition(secondary, wfx.nAvgBytesPerSec + 100);
|
||||||
|
ok(rc == E_INVALIDARG, "Set position to %lu succeeded\n", wfx.nAvgBytesPerSec + 100);
|
||||||
|
rc = IDirectSoundBuffer_GetCurrentPosition(secondary, &pos2, NULL);
|
||||||
|
ok(rc == DS_OK, "Could not get new position: %08lx\n", rc);
|
||||||
|
ok(pos == pos2, "Positions not the same! Old position: %ld, new position: %ld\n", pos, pos2);
|
||||||
}
|
}
|
||||||
ref=IDirectSoundBuffer_Release(secondary);
|
ref=IDirectSoundBuffer_Release(secondary);
|
||||||
ok(ref==0,"IDirectSoundBuffer_Release() secondary has %d references, "
|
ok(ref==0,"IDirectSoundBuffer_Release() secondary has %d references, "
|
||||||
|
|
Loading…
Reference in a new issue