https://bugs.winehq.org/show_bug.cgi?id=41833
--- Comment #3 from Andrew Eikum aeikum@codeweavers.com --- (In reply to Bruno Jesus from comment #1)
I can confirm this issue. Wild guesses follow.
It looks like quartz keeps track of the position the file is now and where it should end. The problem with broken MP3 is that they end before what quartz expect, in this case quartz keeps trying to pump data but it is already past the end of the buffer [2]. Line 204 hits false (there is no else) and it proceeds as if nothing wrong happened and the function will keep returning hr = 0 (good) forever.
Good analysis. That code could definitely use better error handling.
A side note: It looks very suspicious to me that the return from WaitForMultipleObjects is compared with the number of samples [2], because in the situation of the bug the function returns WAIT_TIMEOUT.
Yeah, that's definitely broken. More bad error handling, and that code looks like a rats nest to try to de-tangle.