Calling ExtAudioFileDispose() on a > 2 hour large MP4 audio file causes a crash.
* ExtAudioFileDispose() calls AudioFileClose()
* AudioFileClose() calls MP4AudioFile::Close()
* As part of closing the mp4 file, MP4AudioFile::FillGaplessString() is called
* MP4AudioFile::FillGaplessString() calls UInt32ToHexString with a sufficiently large value (value >= 0x10000000; see NOTES below)
* UInt32ToHexString() calls sprintf() with a too-small stack-allocated buffer
* At the end of UInt32ToHexString(), __stack_chk_guard is found to have been altered, and __stack_chk_fail() is called.
* __stack_chk_fail() logs a message and calls __abort(), which terminates the process.
0 libSystem.B.dylib 0x92978912 __kill + 10
1 libSystem.B.dylib 0x92978904 kill$UNIX2003 + 32
2 libSystem.B.dylib 0x92a0bb99 raise + 26
3 libSystem.B.dylib 0x92a21be5 __abort + 124
4 libSystem.B.dylib 0x92a04928 release_file_streams_for_task + 0
5 ....audio.toolbox.AudioToolbox 0x96996497 UInt32ToHexString(char*, unsigned long, unsigned long) + 183
6 ....audio.toolbox.AudioToolbox 0x96996556 MP4AudioFile::FillGaplessString(char*) + 110
7 ....audio.toolbox.AudioToolbox 0x969993ed MP4AudioFile::Close() + 627
8 ....audio.toolbox.AudioToolbox 0x968f6a25 AudioFileClose + 77
9 ....audio.toolbox.AudioToolbox 0x96959ef6 ExtAudioFile::Close() + 206
10 ....audio.toolbox.AudioToolbox 0x9695a03e ExtAudioFile::~ExtAudioFile() + 40
11 ....audio.toolbox.AudioToolbox 0x9694f89c XExtAudioFile::~XExtAudioFile() + 92
12 ....audio.toolbox.AudioToolbox 0x9694f554 ExtAudioFileDispose + 37
Anyone figured out a workaround?
Best Regards,
Robin