1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-01 07:14:31 +00:00

dsound: Set position past the end of the buffer is invalid.

This commit is contained in:
Yuxuan Shui 2023-12-07 19:55:20 +00:00 committed by Alexandre Julliard
parent 9a42affc34
commit 1941a91536
2 changed files with 12 additions and 2 deletions

View File

@ -574,12 +574,15 @@ static HRESULT WINAPI IDirectSoundBufferImpl_SetCurrentPosition(IDirectSoundBuff
IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer8(iface);
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);
/* start mixing from this new location instead */
newpos %= This->buflen;
newpos -= newpos%This->pwfx->nBlockAlign;
This->sec_mixpos = newpos;

View File

@ -919,6 +919,13 @@ static HRESULT test_block_align(LPGUID lpGuid)
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);
/* 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);
ok(ref==0,"IDirectSoundBuffer_Release() secondary has %d references, "