summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2022-08-31 07:10:20 +0200
committerGitHub <noreply@github.com>2022-08-31 07:10:20 +0200
commit5d1402eae30b2daeeb40ecfb8892a98690850829 (patch)
treef1e0df5f8952deb9f78e8c65ab33b730a4f0e5c4
parenta6de25bbb6af687a2c8e0a76da3231b88d40ddd0 (diff)
downloadflac-5d1402eae30b2daeeb40ecfb8892a98690850829.tar.gz
fuzzer: Do not add corrupt vorbiscomment metadata block
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=50509 Credit: Oss-Fuzz
-rw-r--r--oss-fuzz/fuzzer_encoder_v2.cc23
1 files changed, 16 insertions, 7 deletions
diff --git a/oss-fuzz/fuzzer_encoder_v2.cc b/oss-fuzz/fuzzer_encoder_v2.cc
index 9300a1f0..0970f6bc 100644
--- a/oss-fuzz/fuzzer_encoder_v2.cc
+++ b/oss-fuzz/fuzzer_encoder_v2.cc
@@ -204,25 +204,34 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
}
}
if(encoder_valid && (metadata_mask & 16)){
- if((metadata[num_metadata] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT)) == NULL)
- encoder_valid = false;
- else {
+ if((metadata[num_metadata] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT)) != NULL) {
+ bool vorbiscomment_valid = true;
/* Append a vorbis comment */
if(!FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&VorbisCommentField, "COMMENTARY", "Nothing to 🤔 report"))
- encoder_valid = false;
+ vorbiscomment_valid = false;
else {
if(FLAC__metadata_object_vorbiscomment_append_comment(metadata[num_metadata], VorbisCommentField, false)) {
/* Insert a vorbis comment at the first index */
if(!FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&VorbisCommentField, "COMMENTARY", "Still nothing to report 🤔🤣"))
- encoder_valid = false;
+ vorbiscomment_valid = false;
else
- if(!FLAC__metadata_object_vorbiscomment_insert_comment(metadata[num_metadata++], 0, VorbisCommentField, false))
+ if(!FLAC__metadata_object_vorbiscomment_insert_comment(metadata[num_metadata], 0, VorbisCommentField, false)) {
free(VorbisCommentField.entry);
+ vorbiscomment_valid = false;
+ }
}
- else
+ else {
free(VorbisCommentField.entry);
+ vorbiscomment_valid = false;
+ }
}
+ if(!vorbiscomment_valid) {
+ FLAC__metadata_object_delete(metadata[num_metadata]);
+ metadata[num_metadata] = 0;
+ }
+ else
+ num_metadata++;
}
}