diff options
author | Martijn van Beurden <mvanb1@gmail.com> | 2022-05-18 12:08:24 +0200 |
---|---|---|
committer | Martijn van Beurden <mvanb1@gmail.com> | 2022-05-18 17:12:28 +0200 |
commit | f180900b955d5ec042a68aff05b5055a4542eb79 (patch) | |
tree | a5677c5b618a431251171e1fc50ac3d980f0da4b /src/libFLAC | |
parent | 9e8d7389dc43cc9e53a71a3e8e30f87020367187 (diff) | |
download | flac-f180900b955d5ec042a68aff05b5055a4542eb79.tar.gz |
Fix memory leak
When resetting the decoder, the MD5 buffer wasn't freed but the pointer
set to zero anyway.
Diffstat (limited to 'src/libFLAC')
-rw-r--r-- | src/libFLAC/stream_decoder.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c index fb1042a3..afc3923a 100644 --- a/src/libFLAC/stream_decoder.c +++ b/src/libFLAC/stream_decoder.c @@ -978,8 +978,6 @@ FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder) if(decoder->private_->seek_callback && decoder->private_->seek_callback(decoder, 0, decoder->private_->client_data) == FLAC__STREAM_DECODER_SEEK_STATUS_ERROR) return false; /* seekable and seek fails, reset fails */ } - else - decoder->private_->internal_reset_hack = false; decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_METADATA; @@ -1002,6 +1000,13 @@ FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder) * FLAC__stream_decoder_finish() to make sure things are always cleaned up * properly. */ + if(!decoder->private_->internal_reset_hack) { + /* Only finish MD5 context when it has been initialized + * (i.e. when internal_reset_hack is not set) */ + FLAC__MD5Final(decoder->private_->computed_md5sum, &decoder->private_->md5context); + } + else + decoder->private_->internal_reset_hack = false; FLAC__MD5Init(&decoder->private_->md5context); decoder->private_->first_frame_offset = 0; |