summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2022-05-18 12:08:24 +0200
committerMartijn van Beurden <mvanb1@gmail.com>2022-05-18 17:12:28 +0200
commitf180900b955d5ec042a68aff05b5055a4542eb79 (patch)
treea5677c5b618a431251171e1fc50ac3d980f0da4b /src
parent9e8d7389dc43cc9e53a71a3e8e30f87020367187 (diff)
downloadflac-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')
-rw-r--r--src/libFLAC/stream_decoder.c9
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;