further implementation of new CUESHEET metadata block
diff --git a/src/libFLAC/stream_encoder.c b/src/libFLAC/stream_encoder.c
index 9275ce2..40b44b5 100644
--- a/src/libFLAC/stream_encoder.c
+++ b/src/libFLAC/stream_encoder.c
@@ -659,7 +659,9 @@
metadata_has_seektable = false;
metadata_has_vorbis_comment = false;
for(i = 0; i < encoder->protected_->num_metadata_blocks; i++) {
- if(encoder->protected_->metadata[i]->type == FLAC__METADATA_TYPE_STREAMINFO)
+ if(encoder->protected_->metadata[i]->type >= FLAC__METADATA_TYPE_UNDEFINED)
+ return encoder->protected_->state = FLAC__STREAM_ENCODER_INVALID_METADATA;
+ else if(encoder->protected_->metadata[i]->type == FLAC__METADATA_TYPE_STREAMINFO)
return encoder->protected_->state = FLAC__STREAM_ENCODER_INVALID_METADATA;
else if(encoder->protected_->metadata[i]->type == FLAC__METADATA_TYPE_SEEKTABLE) {
if(metadata_has_seektable) /* only one is allowed */
@@ -673,6 +675,10 @@
return encoder->protected_->state = FLAC__STREAM_ENCODER_INVALID_METADATA;
metadata_has_vorbis_comment = true;
}
+ else if(encoder->protected_->metadata[i]->type == FLAC__METADATA_TYPE_CUESHEET) {
+ if(!FLAC__format_cuesheet_is_legal(&encoder->protected_->metadata[i]->data.cue_sheet, /*check_cd_da_subset=*/false, /*violation=*/0))
+ return encoder->protected_->state = FLAC__STREAM_ENCODER_INVALID_METADATA;
+ }
}
encoder->private_->input_capacity = 0;