Commit 1941a915 authored by Yuxuan Shui's avatar Yuxuan Shui Committed by Alexandre Julliard

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

parent 9a42affc
......@@ -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;
......
......@@ -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, "
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment