// find the families of this segment
KaxInfo *p_info = static_cast<KaxInfo*>(p_l1);
b_keep_segment = b_initial;
- if( unlikely( p_info->GetSize() >= SIZE_MAX ) )
+ if( unlikely( p_info->IsFiniteSize() && p_info->GetSize() >= SIZE_MAX ) )
{
msg_Err( p_demux, "KaxInfo too big aborting" );
break;
KaxCueTime &ctime = *(KaxCueTime*)el;
try
{
- if( unlikely( ctime.GetSize() >= SIZE_MAX ) )
+ if( unlikely( !ctime.ValidateSize() ) )
{
msg_Err( &sys.demuxer, "CueTime size too big");
b_invalid_cue = true;
{
while( ( el = ep->Get() ) != NULL )
{
- if( unlikely( el->GetSize() >= SIZE_MAX ) )
+ if( unlikely( !el->ValidateSize() ) )
{
ep->Up();
msg_Err( &sys.demuxer, "Error %s too big, aborting", typeid(*el).name() );
{
while( ( el = ep->Get() ) != NULL && size < max_size)
{
- if( unlikely( el->GetSize() >= SIZE_MAX ) )
+ if( unlikely( !el->ValidateSize() ) )
{
msg_Err( &sys.demuxer, "Error %s too big ignoring the tag", typeid(*el).name() );
delete ep;
{
try
{
- if( unlikely( el->GetSize() >= SIZE_MAX ) )
+ if( unlikely( !el->ValidateSize() ) )
{
msg_Err( &sys.demuxer, "Invalid size while reading tag");
break;
}
break;
case 2:
- if( unlikely( el->GetSize() >= SIZE_MAX ) )
+ if( unlikely( !el->ValidateSize() ||
+ ( el->IsFiniteSize() && el->GetSize() >= SIZE_MAX ) ) )
{
msg_Err( &sys.demuxer, "Error while reading %s... upping level", typeid(*el).name());
ep->Up();
}
break;
case 3:
- if( unlikely( el->GetSize() >= SIZE_MAX ) )
+ if( unlikely( !el->ValidateSize() ||
+ ( el->IsFiniteSize() && el->GetSize() >= SIZE_MAX ) ) )
{
msg_Err( &sys.demuxer, "Error while reading %s... upping level", typeid(*el).name());
ep->Up();
{
while( ( l = ep->Get() ) != NULL )
{
- if( unlikely( l->GetSize() >= SIZE_MAX ) )
+ if( unlikely( !l->ValidateSize() ) )
{
msg_Err( &sys.demuxer,"%s too big... skipping it", typeid(*l).name() );
continue;
int i_upper_level = 0;
/* Master elements */
- if( unlikely( tracks->GetSize() >= SIZE_MAX ) )
+ if( unlikely( tracks->IsFiniteSize() && tracks->GetSize() >= SIZE_MAX ) )
{
msg_Err( &sys.demuxer, "Track too big, aborting" );
return;
/* Master elements */
m = static_cast<EbmlMaster *>(info);
- if( unlikely( m->GetSize() >= SIZE_MAX ) )
+ if( unlikely( m->IsFiniteSize() && m->GetSize() >= SIZE_MAX ) )
{
msg_Err( &sys.demuxer, "Info too big, aborting" );
return;
KaxChapterTranslate *p_trans = static_cast<KaxChapterTranslate*>( l );
try
{
- if( unlikely( p_trans->GetSize() >= SIZE_MAX ) )
+ if( unlikely( p_trans->IsFiniteSize() && p_trans->GetSize() >= SIZE_MAX ) )
{
msg_Err( &sys.demuxer, "Chapter translate too big, aborting" );
continue;
EbmlElement *el;
int i_upper_level = 0;
- if( unlikely( attachments->GetSize() >= SIZE_MAX ) )
+ if( unlikely( attachments->IsFiniteSize() && attachments->GetSize() >= SIZE_MAX ) )
{
msg_Err( &sys.demuxer, "Attachments too big, aborting" );
return;
int i_upper_level = 0;
/* Master elements */
- if( unlikely( chapters->GetSize() >= SIZE_MAX ) )
+ if( unlikely( chapters->IsFiniteSize() && chapters->GetSize() >= SIZE_MAX ) )
{
msg_Err( &sys.demuxer, "Chapters too big, aborting" );
return;
/* Master elements */
m = static_cast<EbmlMaster *>( cluster );
- if( unlikely( m->GetSize() >= SIZE_MAX ) )
+ if( unlikely( m->IsFiniteSize() && m->GetSize() >= SIZE_MAX ) )
{
msg_Err( &sys.demuxer, "Cluster too big, aborting" );
return;