Description: fixing another memory leak in FLAC code CVE-2017-8363 Author: Erik de Castro Lopo Origin: upstream Applied-Upstream: https://github.com/erikd/libsndfile/commit/cd7da8dbf6ee4310d21d9e44b385d6797160d9e8 & https://github.com/erikd/libsndfile/commit/5206a9b65e61598fde44d276c81b0585bc428562 Last-Update: 2017-05-28 --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ --- libsndfile.orig/src/flac.c +++ libsndfile/src/flac.c @@ -430,8 +430,7 @@ static void sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; - FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ; - int bitwidth = 0, i ; + int bitwidth = 0 ; switch (metadata->type) { case FLAC__METADATA_TYPE_STREAMINFO : @@ -481,12 +480,6 @@ if (bitwidth > 0) psf_log_printf (psf, " Bit width : %d\n", bitwidth) ; - - - for (i = 0 ; i < psf->sf.channels ; i++) - pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (int32_t)) ; - - pflac->wbuffer = (const int32_t* const*) pflac->rbuffer ; break ; case FLAC__METADATA_TYPE_VORBIS_COMMENT : @@ -848,7 +841,9 @@ psf_log_printf (psf, "End\n") ; - if (psf->error == 0) + if (psf->error != 0) + FLAC__stream_decoder_delete (pflac->fsd) ; + else { FLAC__uint64 position ; FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;