Module: wine Branch: oldstable Commit: a0f1cf0449bc8225720ad38702d0235886c6da5e URL: https://source.winehq.org/git/wine.git/?a=commit;h=a0f1cf0449bc8225720ad3870...
Author: Myah Caron qsniyg@protonmail.com Date: Thu Sep 17 05:18:08 2020 -0700
dmband: Avoid cloning stream in parse_bands_list.
A stream that doesn't implement ::Clone can be passed, causing IStream_Seek to crash.
Signed-off-by: Myah Caron qsniyg@protonmail.com Signed-off-by: Michael Stefaniuc mstefani@winehq.org Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 2cf69bb5a5b43951abb251f415ccb81e809bd32e) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/dmband/bandtrack.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index 14d2c7a571c..612be063e19 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -425,21 +425,22 @@ static HRESULT parse_bands_list(IDirectMusicBandTrack *This, DMUS_PRIVATE_CHUNK StreamSize = Chunk.dwSize - sizeof(FOURCC); switch (Chunk.fccID) { case DMUS_FOURCC_BAND_FORM: { - LPSTREAM pClonedStream = NULL; + ULARGE_INTEGER liOrigPos; TRACE_(dmfile)(": BAND RIFF\n"); - - IStream_Clone (pStm, &pClonedStream); - + liMove.QuadPart = 0; + IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, &liOrigPos); + liMove.QuadPart -= sizeof(FOURCC) + (sizeof(FOURCC)+sizeof(DWORD)); - IStream_Seek (pClonedStream, liMove, STREAM_SEEK_CUR, NULL); + IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- hr = load_band(This, pClonedStream, &pBand, &header); + hr = load_band(This, pStm, &pBand, &header); if (FAILED(hr)) { ERR(": could not load track\n"); return hr; } - IStream_Release (pClonedStream); + liMove.QuadPart = (LONGLONG)liOrigPos.QuadPart; + IStream_Seek (pStm, liMove, STREAM_SEEK_SET, NULL); IDirectMusicTrack_Release(pBand); pBand = NULL; /* now we can release at as it inserted */