--- ../quake3-base/code/client/snd_openal.c 2006-02-26 16:45:05.000000000 +0100 +++ ./code/client/snd_openal.c 2006-02-26 16:29:24.000000000 +0100 @@ -1377,7 +1377,23 @@ // Queue the musicBuffers up for(i = 0; i < NUM_MUSIC_BUFFERS; i++) + { S_AL_MusicProcess(musicBuffers[i]); + + // check whether our stream still exists. + if(!mus_stream) + { + // there was an error in reading which resulted in a + // closed stream. We must bail out or we'll crash. + + // deallocate everything we allocated so far: + qalDeleteBuffers(NUM_MUSIC_BUFFERS, musicBuffers); + S_AL_MusicSourceFree(); + + return; + } + } + qalSourceQueueBuffers(musicSource, NUM_MUSIC_BUFFERS, musicBuffers); // Set the initial gain property --- ../quake3-base/code/client/snd_codec_ogg.c 2006-02-26 16:45:05.000000000 +0100 +++ ./code/client/snd_codec_ogg.c 2006-02-26 16:25:40.000000000 +0100 @@ -412,7 +412,7 @@ void *S_OGG_CodecLoad(const char *filename, snd_info_t *info) { snd_stream_t *stream; - unsigned char *buffer; + byte *buffer; int bytesRead; // check if input is valid @@ -452,8 +452,9 @@ // we don't even have read a single byte if(bytesRead <= 0) { + Z_Free(buffer); S_OGG_CodecCloseStream(stream); - + return NULL; }