summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2022-06-18 16:23:30 +0200
committerMartijn van Beurden <mvanb1@gmail.com>2022-07-07 22:06:14 +0200
commit772efde6a711c71d28aa1dd7384a1337c2e7b187 (patch)
treea81fcb32f8d2ecf78906f6773732425dcfa18a7b /src
parentb963ce0873d17afb23776cc212625e9e2b15ae4a (diff)
downloadflac-772efde6a711c71d28aa1dd7384a1337c2e7b187.tar.gz
Check first metadata block is streaminfo in level 1 metadata iterator
In simple_iterator_prime_input_ there was no check whether the first metadata block is a streaminfo block. As the rest of the functions operate under the assumption the first block is a streaminfo block, for example to prevent the functions from deleting the last block and being left with an iterator pointing nowhere, this check is added.
Diffstat (limited to 'src')
-rw-r--r--src/libFLAC/metadata_iterators.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libFLAC/metadata_iterators.c b/src/libFLAC/metadata_iterators.c
index 55562b43..5b791184 100644
--- a/src/libFLAC/metadata_iterators.c
+++ b/src/libFLAC/metadata_iterators.c
@@ -446,7 +446,15 @@ static FLAC__bool simple_iterator_prime_input_(FLAC__Metadata_SimpleIterator *it
case 0:
iterator->depth = 0;
iterator->first_offset = iterator->offset[iterator->depth] = ftello(iterator->file);
- return read_metadata_block_header_(iterator);
+ ret = read_metadata_block_header_(iterator);
+ /* The first metadata block must be a streaminfo. If this is not the
+ * case, the file is invalid and assumptions made elsewhere in the
+ * code are invalid */
+ if(iterator->type != FLAC__METADATA_TYPE_STREAMINFO) {
+ iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_BAD_METADATA;
+ return false;
+ }
+ return ret;
case 1:
iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR;
return false;