summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2022-02-02 20:30:36 +0100
committerMartijn van Beurden <mvanb1@gmail.com>2022-05-01 17:35:36 +0200
commit3fc5ba46375e48009cd9428091cd2ffd242de6b9 (patch)
tree24fe60258aa077ffea3daa6019adfba6b0ff6c38 /src
parentee9c07aa22e8393b914cd049637dea5676dd2edc (diff)
downloadflac-3fc5ba46375e48009cd9428091cd2ffd242de6b9.tar.gz
Replace seek error with handling when hitting EOF while reading frame
Diffstat (limited to 'src')
-rw-r--r--src/libFLAC/stream_decoder.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c
index 31f07e7d..5f38aa63 100644
--- a/src/libFLAC/stream_decoder.c
+++ b/src/libFLAC/stream_decoder.c
@@ -3334,8 +3334,14 @@ FLAC__bool seek_to_absolute_sample_(FLAC__StreamDecoder *decoder, FLAC__uint64 s
* FLAC__stream_decoder_process_single() to return false.
*/
decoder->private_->unparseable_frame_count = 0;
- if(!FLAC__stream_decoder_process_single(decoder) ||
- decoder->protected_->state == FLAC__STREAM_DECODER_ABORTED) {
+ if(!FLAC__stream_decoder_process_single(decoder) && decoder->private_->eof_callback(decoder, decoder->private_->client_data)){
+ /* decoder has hit end of stream while processing corrupt
+ * frame, try again. This is very inefficient but shouldn't
+ * happen often, and a more efficient solution would require
+ * quite a bit more code */
+ upper_bound--;
+ continue;
+ }else if(decoder->protected_->state == FLAC__STREAM_DECODER_ABORTED) {
decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
return false;
}