From 74e751c421dfc578449906af3afa70489e5fb50b Mon Sep 17 00:00:00 2001 From: Erik de Castro Lopo Date: Wed, 13 Jul 2016 19:41:14 +1000 Subject: [PATCH] libFLAC: Set decoding status if write callback failed Previously, it the write callback failed the error status would be set to `FLAC__STREAM_DECODER_READ_FRAME`. Now it gets set to `FLAC__STREAM_DECODER_WRITE_STATUS_ABORT`. Patch-from: lvqcl --- include/FLAC/stream_decoder.h | 2 +- src/libFLAC/stream_decoder.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/FLAC/stream_decoder.h b/include/FLAC/stream_decoder.h index 9bfdd1f5..27a61a1e 100644 --- a/include/FLAC/stream_decoder.h +++ b/include/FLAC/stream_decoder.h @@ -228,7 +228,7 @@ typedef enum { */ FLAC__STREAM_DECODER_ABORTED, - /**< The decoder was aborted by the read callback. */ + /**< The decoder was aborted by the read or write callback. */ FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR, /**< An error occurred allocating memory. The decoder is in an invalid diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c index c3a903f9..91535ac5 100644 --- a/src/libFLAC/stream_decoder.c +++ b/src/libFLAC/stream_decoder.c @@ -2147,8 +2147,10 @@ FLAC__bool read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FL /* write it */ if(do_full_decode) { - if(write_audio_frame_to_client_(decoder, &decoder->private_->frame, (const FLAC__int32 * const *)decoder->private_->output) != FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE) + if(write_audio_frame_to_client_(decoder, &decoder->private_->frame, (const FLAC__int32 * const *)decoder->private_->output) != FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE) { + decoder->protected_->state = FLAC__STREAM_DECODER_ABORTED; return false; + } } decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;