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 ...@@ -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) ...@@ -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, "
......
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