summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2022-08-13 16:49:44 +0200
committerMartijn van Beurden <mvanb1@gmail.com>2022-08-20 16:03:53 +0200
commit3ce4475451d19ea2762c596797f95c8fd0204bf2 (patch)
treed550caaaf96de5ac9e619ba41b9cfb100c22269d
parent70e63b03eccd7483be79e82502d1a5aee20436ab (diff)
downloadflac-3ce4475451d19ea2762c596797f95c8fd0204bf2.tar.gz
Don't overwrite bad state with seek error
In case memory allocation fails or decoding is aborted during seeking, do not overwrite these states with a seek error
-rw-r--r--src/libFLAC/stream_decoder.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c
index 2c4afaa5..23a0c890 100644
--- a/src/libFLAC/stream_decoder.c
+++ b/src/libFLAC/stream_decoder.c
@@ -3360,6 +3360,11 @@ FLAC__bool seek_to_absolute_sample_(FLAC__StreamDecoder *decoder, FLAC__uint64 s
decoder->private_->target_sample = target_sample;
while(1) {
+ /* check whether decoder is still valid so bad state isn't overwritten
+ * with seek error */
+ if(decoder->protected_->state == FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR ||
+ decoder->protected_->state == FLAC__STREAM_DECODER_ABORTED)
+ return false;
/* check if the bounds are still ok */
if (lower_bound_sample >= upper_bound_sample || lower_bound > upper_bound) {
decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;