-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[raudio] Failing to load a MP3-File causes a double free #3889
Comments
Checking other formats, the .wav format also has the same double free error message, so i suspect its the same issue with |
Able to reproduce a similar issue with the
|
This is fixed by #3917 but it was a separate issue. Original issue still holds. |
@RobLoach @veins1 @FishingHacks I'm reviewing this issue but I can't reproduce it. Using raylib latest version from GitHub master branch. Please, could you provide some sample code/example to review it? |
@raysan5 To reproduce you can create an empty file and rename it to file.mp3 . Then modify audio_music_stream.c so that it loads this file. |
Fix for raysan5#3889 Fixes for QOA crashes. Memory leak FIX on unsuccessful .wav loading.
* Fixes for loading Music Fix for #3889 Fixes for QOA crashes. Memory leak FIX on unsuccessful .wav loading. * Added comments
Okay, sorry for the late reply, have been busy lately. The Pull Request #3966 seems to have fixed most issues, ogg, mp3, qoa, flac, xm and mod files seem to work. wav files are still broken. Taking a quick look at the pull request, it calls My code (main.c): #include "raylib.h"
#include "stdio.h"
int main(int argc, char **argv) {
if (argc != 2) {
printf("usage: main [file]");
return -2;
}
InitAudioDevice();
if (!IsAudioDeviceReady()) {
printf("couldn't initialize the audio device");
return -1;
}
Music stream = LoadMusicStream(argv[1]);
PlayMusicStream(stream);
while (IsMusicStreamPlaying(stream)) {
UpdateMusicStream(stream);
}
UnloadMusicStream(stream);
CloseAudioDevice();
return 0;
} I ran the following commands (assuming we start out in an empty directory with the above source in
|
Couldn't reproduce the .wav crash, but going through the code in a debugger, drwav_uninit doesn't do anything useful in our case. I think it's safe to remove it, can you confirm that removing it fixes the crash? |
@FishingHacks @veins1 Thank you very much for reviewing this issue! Feel free to send a PR if you confirm removing |
That did indeed fix the issue i was having, i created a pull request (#3986) to fix this PS: Thanks for your incredible work on raylib |
@FishingHacks thank you very much for reviewing this issue! 😄 |
no problem! |
Issue description
When using
LoadMusicStream()
on a file that is not valid mp3, raylib crashes withfree(): double free detected in tcache 2
.I tried digging a bit deeper and upon further (tho not very detailed) inspection, i found out that
drmp3_init_file
closes the file if it could not successfully load (dr_mp3.h:3536
).pclose
is later called again bydrmp3_uninit
(raudio.c:1448:54
).drmp3_uninit
seems to be causing the issue as removing it fixes it. I also noticed thatdrmp3_uninit
callsdrmp3__free_from_callbacks
, but that shouldnt be called anyway becausedrmp3_init_internal
calls it when it fails (dr_mp3.h:2854:9
).Environment
Platform: Desktop
Code Example
The text was updated successfully, but these errors were encountered: