https://bugs.winehq.org/show_bug.cgi?id=41833
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Summary|DirectShow applications: |DirectShow applications: |Playback doesn't end when |Playback doesn't finish |playing some MP3 files if |when playing MP3 files that |winegstreamer is disabled |end in bad data if | |winegstreamer is disabled CC| |aeikum@codeweavers.com URL| |http://ftp.vector.co.jp/66/ | |17/3135/MysticStar.zip
--- Comment #1 from Bruno Jesus 00cpxxx@gmail.com --- 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.
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.
[1] https://source.winehq.org/source/dlls/quartz/mpegsplit.c#0195 [2] https://source.winehq.org/source/dlls/quartz/filesource.c#1191