Check number of metadata blocks

Fixes out-of-bounds access

Credit: Oss-Fuzz
This commit is contained in:
Martijn van Beurden 2022-11-16 20:16:26 +01:00 committed by GitHub
parent 36bba3befb
commit 5663f11795
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -33,6 +33,8 @@
#include "FLAC++/metadata.h"
#include "fuzzer_common.h"
#define MAX_NUM_METADATA_BLOCKS 2048
namespace FLAC {
namespace Encoder {
class FuzzerStream : public Stream {
@ -57,10 +59,11 @@ namespace FLAC {
FuzzerDecoder(fuzzing::datasource::Datasource& dsrc, FLAC::Encoder::FuzzerStream& encoder_arg) :
Stream(), ds(dsrc), encoder(encoder_arg) { }
::FLAC__StreamMetadata * metadata_blocks[16] = {0};
::FLAC__StreamMetadata * metadata_blocks[MAX_NUM_METADATA_BLOCKS] = {0};
int num_metadata_blocks = 0;
void metadata_callback(const ::FLAC__StreamMetadata *metadata) override {
if(num_metadata_blocks < MAX_NUM_METADATA_BLOCKS)
if((metadata_blocks[num_metadata_blocks] = FLAC__metadata_object_clone(metadata)) != NULL)
num_metadata_blocks++;
}