From: Andre Noll Date: Tue, 3 Sep 2013 22:55:21 +0000 (+0000) Subject: flacdec: Avoid busy loop. X-Git-Tag: v0.5.1~4^2~1 X-Git-Url: http://git.tue.mpg.de/?a=commitdiff_plain;h=76a2c8cdd49d77ab9fa0db42b0a70428fdafd0a2;p=paraslash.git flacdec: Avoid busy loop. May happen when the last frame of a stream is incomplete. --- diff --git a/flacdec_filter.c b/flacdec_filter.c index b51ac3bd..01937e93 100644 --- a/flacdec_filter.c +++ b/flacdec_filter.c @@ -63,6 +63,16 @@ static FLAC__StreamDecoderReadStatus read_cb( } if (*bytes > 0) return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; + /** + * Nothing was copied. If the input queue of the btrn is smaller than + * the minimal input queue size, our parent must have been gone, so + * we're not going to get more input. Since our remaining data is not + * sufficient do decode a single frame, we have an EOF condition. + */ + if (btr_get_input_queue_size(btrn) < fn->min_iqs) { + assert(btr_no_parent(btrn)); + return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; + } /* * We are kind of screwed here. Returning CONTINUE with a byte count of * zero leads to an endless loop, so we must return either EOF or