Check number of metadata blocks
Fixes out-of-bounds access Credit: Oss-Fuzz
This commit is contained in:
parent
36bba3befb
commit
5663f11795
@ -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++;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user