<div dir="ltr"><div>Let's see with a copy/paste of the patch file. If it doesn't work I'll need to attach the patch files. Which is not good to comment them.<br></div>If the problem if with the line length, I'll have to change the original source code as well. But then patches won't go through either.<br><div><br>[PATCH] MKV: we can read a Cluster with unknown size and more check finite size checking before testing too big sizes<br><br>---<br> modules/demux/mkv/demux.cpp                  |  2 +-<br> modules/demux/mkv/matroska_segment.cpp       | 12 ++++++------<br> modules/demux/mkv/matroska_segment_parse.cpp | 14 +++++++-------<br> 3 files changed, 14 insertions(+), 14 deletions(-)<br><br>diff --git a/modules/demux/mkv/demux.cpp b/modules/demux/mkv/demux.cpp<br>index 1feca55..21618f4 100644<br>--- a/modules/demux/mkv/demux.cpp<br>+++ b/modules/demux/mkv/demux.cpp<br>@@ -519,7 +519,7 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS<br>                     // find the families of this segment<br>                     KaxInfo *p_info = static_cast<KaxInfo*>(p_l1);<br>                     b_keep_segment = b_initial;<br>-                    if( unlikely( p_info->GetSize() >= SIZE_MAX ) )<br>+                    if( unlikely( p_info->IsFiniteSize() && p_info->GetSize() >= SIZE_MAX ) )<br>                     {<br>                         msg_Err( p_demux, "KaxInfo too big aborting" );<br>                         break;<br>diff --git a/modules/demux/mkv/matroska_segment.cpp b/modules/demux/mkv/matroska_segment.cpp<br>index df24096..f71df70 100644<br>--- a/modules/demux/mkv/matroska_segment.cpp<br>+++ b/modules/demux/mkv/matroska_segment.cpp<br>@@ -139,7 +139,7 @@ void matroska_segment_c::LoadCues( KaxCues *cues )<br>                     KaxCueTime &ctime = *(KaxCueTime*)el;<br>                     try<br>                     {<br>-                        if( unlikely( ctime.GetSize() >= SIZE_MAX ) )<br>+                        if( unlikely( ctime.IsFiniteSize() && ctime.GetSize() >= SIZE_MAX ) )<br>                         {<br>                             msg_Err( &sys.demuxer, "CueTime size too big");<br>                             b_invalid_cue = true;<br>@@ -162,7 +162,7 @@ void matroska_segment_c::LoadCues( KaxCues *cues )<br>                     {<br>                         while( ( el = ep->Get() ) != NULL )<br>                         {<br>-                            if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>+                            if( unlikely( el->IsFiniteSize() && el->GetSize() >= SIZE_MAX ) )<br>                             {<br>                                 ep->Up();<br>                                 msg_Err( &sys.demuxer, "Error %s too big, aborting", typeid(*el).name() );<br>@@ -296,7 +296,7 @@ SimpleTag * matroska_segment_c::ParseSimpleTags( KaxTagSimple *tag, int target_t<br>     {<br>         while( ( el = ep->Get() ) != NULL && size < max_size)<br>         {<br>-            if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>+            if( unlikely( el->IsFiniteSize() && el->GetSize() >= SIZE_MAX ) )<br>             {<br>                 msg_Err( &sys.demuxer, "Error %s too big ignoring the tag", typeid(*el).name() );<br>                 delete ep;<br>@@ -409,7 +409,7 @@ void matroska_segment_c::LoadTags( KaxTags *tags )<br>                     {<br>                         try<br>                         {<br>-                            if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>+                            if( unlikely( el->IsFiniteSize() && el->GetSize() >= SIZE_MAX ) )<br>                             {<br>                                 msg_Err( &sys.demuxer, "Invalid size while reading tag");<br>                                 break;<br>@@ -1351,7 +1351,7 @@ int matroska_segment_c::BlockGet( KaxBlock * & pp_block, KaxSimpleBlock * & pp_s<br>                     }<br>                     break;<br>                 case 2:<br>-                    if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>+                    if( unlikely( el->IsFiniteSize() && el->GetSize() >= SIZE_MAX ) )<br>                     {<br>                         msg_Err( &sys.demuxer, "Error while reading %s... upping level", typeid(*el).name());<br>                         ep->Up();<br>@@ -1388,7 +1388,7 @@ int matroska_segment_c::BlockGet( KaxBlock * & pp_block, KaxSimpleBlock * & pp_s<br>                     }<br>                     break;<br>                 case 3:<br>-                    if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>+                    if( unlikely( el->IsFiniteSize() && el->GetSize() >= SIZE_MAX ) )<br>                     {<br>                         msg_Err( &sys.demuxer, "Error while reading %s... upping level", typeid(*el).name());<br>                         ep->Up();<br>diff --git a/modules/demux/mkv/matroska_segment_parse.cpp b/modules/demux/mkv/matroska_segment_parse.cpp<br>index 751c824..fc80103 100644<br>--- a/modules/demux/mkv/matroska_segment_parse.cpp<br>+++ b/modules/demux/mkv/matroska_segment_parse.cpp<br>@@ -93,7 +93,7 @@ void matroska_segment_c::ParseSeekHead( KaxSeekHead *seekhead )<br>             {<br>                 while( ( l = ep->Get() ) != NULL )<br>                 {<br>-                    if( unlikely( l->GetSize() >= SIZE_MAX ) )<br>+                    if( unlikely( l->IsFiniteSize() && l->GetSize() >= SIZE_MAX ) )<br>                     {<br>                         msg_Err( &sys.demuxer,"%s too big... skipping it",  typeid(*l).name() );<br>                         continue;<br>@@ -745,7 +745,7 @@ void matroska_segment_c::ParseTracks( KaxTracks *tracks )<br>     int i_upper_level = 0;<br> <br>     /* Master elements */<br>-    if( unlikely( tracks->GetSize() >= SIZE_MAX ) )<br>+    if( unlikely( tracks->IsFiniteSize() && tracks->GetSize() >= SIZE_MAX ) )<br>     {<br>         msg_Err( &sys.demuxer, "Track too big, aborting" );<br>         return;<br>@@ -786,7 +786,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info )<br> <br>     /* Master elements */<br>     m = static_cast<EbmlMaster *>(info);<br>-    if( unlikely( m->GetSize() >= SIZE_MAX ) )<br>+    if( unlikely( m->IsFiniteSize() && m->GetSize() >= SIZE_MAX ) )<br>     {<br>         msg_Err( &sys.demuxer, "Info too big, aborting" );<br>         return;<br>@@ -914,7 +914,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info )<br>             KaxChapterTranslate *p_trans = static_cast<KaxChapterTranslate*>( l );<br>             try<br>             {<br>-                if( unlikely( p_trans->GetSize() >= SIZE_MAX ) )<br>+                if( unlikely( p_trans->IsFiniteSize() && p_trans->GetSize() >= SIZE_MAX ) )<br>                 {<br>                     msg_Err( &sys.demuxer, "Chapter translate too big, aborting" );<br>                     continue;<br>@@ -1108,7 +1108,7 @@ void matroska_segment_c::ParseAttachments( KaxAttachments *attachments )<br>     EbmlElement *el;<br>     int i_upper_level = 0;<br> <br>-    if( unlikely( attachments->GetSize() >= SIZE_MAX ) )<br>+    if( unlikely( attachments->IsFiniteSize() && attachments->GetSize() >= SIZE_MAX ) )<br>     {<br>         msg_Err( &sys.demuxer, "Attachments too big, aborting" );<br>         return;<br>@@ -1171,7 +1171,7 @@ void matroska_segment_c::ParseChapters( KaxChapters *chapters )<br>     int i_upper_level = 0;<br> <br>     /* Master elements */<br>-    if( unlikely( chapters->GetSize() >= SIZE_MAX ) )<br>+    if( unlikely( chapters->IsFiniteSize() && chapters->GetSize() >= SIZE_MAX ) )<br>     {<br>         msg_Err( &sys.demuxer, "Chapters too big, aborting" );<br>         return;<br>@@ -1245,7 +1245,7 @@ void matroska_segment_c::ParseCluster( KaxCluster *cluster, bool b_update_start_<br> <br>     /* Master elements */<br>     m = static_cast<EbmlMaster *>( cluster );<br>-    if( unlikely( m->GetSize() >= SIZE_MAX ) )<br>+    if( unlikely( m->IsFiniteSize() && m->GetSize() >= SIZE_MAX ) )<br>     {<br>         msg_Err( &sys.demuxer, "Cluster too big, aborting" );<br>         return;<br>-- <br>1.9.5.msysgit.0<br><br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Feb 22, 2015 at 10:38 PM, Jean-Baptiste Kempf <span dir="ltr"><<a href="mailto:jb@videolan.org" target="_blank">jb@videolan.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Does not work either.<br>
<br>
Also, your mailer destroys your patches.<br>
<br>
Le 20/02/2015 19:37, Steve Lhomme a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Here's one over the current master. I'll submit the other one after this<br>
one is in, as it depends on it.<br>
<br>
---<br>
  modules/demux/mkv/demux.cpp                  |  2 +-<br>
  modules/demux/mkv/matroska_<u></u>segment.cpp       | 12 ++++++------<br>
  modules/demux/mkv/matroska_<u></u>segment_parse.cpp | 14 +++++++-------<br>
  3 files changed, 14 insertions(+), 14 deletions(-)<br>
<br>
diff --git a/modules/demux/mkv/demux.cpp b/modules/demux/mkv/demux.cpp<br>
index 1feca55..21618f4 100644<br>
--- a/modules/demux/mkv/demux.cpp<br>
+++ b/modules/demux/mkv/demux.cpp<br>
@@ -519,7 +519,7 @@ matroska_stream_c<br>
*demux_sys_t::<u></u>AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS<br>
                      // find the families of this segment<br>
                      KaxInfo *p_info = static_cast<KaxInfo*>(p_l1);<br>
                      b_keep_segment = b_initial;<br>
-                    if( unlikely( p_info->GetSize() >= SIZE_MAX ) )<br>
+                    if( unlikely( p_info->IsFiniteSize() &&<br>
p_info->GetSize() >= SIZE_MAX ) )<br>
                      {<br>
                          msg_Err( p_demux, "KaxInfo too big aborting" );<br>
                          break;<br>
diff --git a/modules/demux/mkv/matroska_<u></u>segment.cpp<br>
b/modules/demux/mkv/matroska_<u></u>segment.cpp<br>
index df24096..f71df70 100644<br>
--- a/modules/demux/mkv/matroska_<u></u>segment.cpp<br>
+++ b/modules/demux/mkv/matroska_<u></u>segment.cpp<br>
@@ -139,7 +139,7 @@ void matroska_segment_c::LoadCues( KaxCues *cues )<br>
                      KaxCueTime &ctime = *(KaxCueTime*)el;<br>
                      try<br>
                      {<br>
-                        if( unlikely( ctime.GetSize() >= SIZE_MAX ) )<br>
+                        if( unlikely( ctime.IsFiniteSize() &&<br>
ctime.GetSize() >= SIZE_MAX ) )<br>
                          {<br>
                              msg_Err( &sys.demuxer, "CueTime size too<br>
big");<br>
                              b_invalid_cue = true;<br>
@@ -162,7 +162,7 @@ void matroska_segment_c::LoadCues( KaxCues *cues )<br>
                      {<br>
                          while( ( el = ep->Get() ) != NULL )<br>
                          {<br>
-                            if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
+                            if( unlikely( el->IsFiniteSize() &&<br>
el->GetSize() >= SIZE_MAX ) )<br>
                              {<br>
                                  ep->Up();<br>
                                  msg_Err( &sys.demuxer, "Error %s too<br>
big, aborting", typeid(*el).name() );<br>
@@ -296,7 +296,7 @@ SimpleTag * matroska_segment_c::<u></u>ParseSimpleTags(<br>
KaxTagSimple *tag, int target_t<br>
      {<br>
          while( ( el = ep->Get() ) != NULL && size < max_size)<br>
          {<br>
-            if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
+            if( unlikely( el->IsFiniteSize() && el->GetSize() >=<br>
SIZE_MAX ) )<br>
              {<br>
                  msg_Err( &sys.demuxer, "Error %s too big ignoring the<br>
tag", typeid(*el).name() );<br>
                  delete ep;<br>
@@ -409,7 +409,7 @@ void matroska_segment_c::LoadTags( KaxTags *tags )<br>
                      {<br>
                          try<br>
                          {<br>
-                            if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
+                            if( unlikely( el->IsFiniteSize() &&<br>
el->GetSize() >= SIZE_MAX ) )<br>
                              {<br>
                                  msg_Err( &sys.demuxer, "Invalid size<br>
while reading tag");<br>
                                  break;<br>
@@ -1351,7 +1351,7 @@ int matroska_segment_c::BlockGet( KaxBlock * &<br>
pp_block, KaxSimpleBlock * & pp_s<br>
                      }<br>
                      break;<br>
                  case 2:<br>
-                    if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
+                    if( unlikely( el->IsFiniteSize() && el->GetSize()<br>
 >= SIZE_MAX ) )<br>
                      {<br>
                          msg_Err( &sys.demuxer, "Error while reading<br>
%s... upping level", typeid(*el).name());<br>
                          ep->Up();<br>
@@ -1388,7 +1388,7 @@ int matroska_segment_c::BlockGet( KaxBlock * &<br>
pp_block, KaxSimpleBlock * & pp_s<br>
                      }<br>
                      break;<br>
                  case 3:<br>
-                    if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
+                    if( unlikely( el->IsFiniteSize() && el->GetSize()<br>
 >= SIZE_MAX ) )<br>
                      {<br>
                          msg_Err( &sys.demuxer, "Error while reading<br>
%s... upping level", typeid(*el).name());<br>
                          ep->Up();<br>
diff --git a/modules/demux/mkv/matroska_<u></u>segment_parse.cpp<br>
b/modules/demux/mkv/matroska_<u></u>segment_parse.cpp<br>
index 751c824..fc80103 100644<br>
--- a/modules/demux/mkv/matroska_<u></u>segment_parse.cpp<br>
+++ b/modules/demux/mkv/matroska_<u></u>segment_parse.cpp<br>
@@ -93,7 +93,7 @@ void matroska_segment_c::<u></u>ParseSeekHead( KaxSeekHead<br>
*seekhead )<br>
              {<br>
                  while( ( l = ep->Get() ) != NULL )<br>
                  {<br>
-                    if( unlikely( l->GetSize() >= SIZE_MAX ) )<br>
+                    if( unlikely( l->IsFiniteSize() && l->GetSize() >=<br>
SIZE_MAX ) )<br>
                      {<br>
                          msg_Err( &sys.demuxer,"%s too big... skipping<br>
it",  typeid(*l).name() );<br>
                          continue;<br>
@@ -745,7 +745,7 @@ void matroska_segment_c::<u></u>ParseTracks( KaxTracks<br>
*tracks )<br>
      int i_upper_level = 0;<br>
<br>
      /* Master elements */<br>
-    if( unlikely( tracks->GetSize() >= SIZE_MAX ) )<br>
+    if( unlikely( tracks->IsFiniteSize() && tracks->GetSize() >=<br>
SIZE_MAX ) )<br>
      {<br>
          msg_Err( &sys.demuxer, "Track too big, aborting" );<br>
          return;<br>
@@ -786,7 +786,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info )<br>
<br>
      /* Master elements */<br>
      m = static_cast<EbmlMaster *>(info);<br>
-    if( unlikely( m->GetSize() >= SIZE_MAX ) )<br>
+    if( unlikely( m->IsFiniteSize() && m->GetSize() >= SIZE_MAX ) )<br>
      {<br>
          msg_Err( &sys.demuxer, "Info too big, aborting" );<br>
          return;<br>
@@ -914,7 +914,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info )<br>
              KaxChapterTranslate *p_trans =<br>
static_cast<<u></u>KaxChapterTranslate*>( l );<br>
              try<br>
              {<br>
-                if( unlikely( p_trans->GetSize() >= SIZE_MAX ) )<br>
+                if( unlikely( p_trans->IsFiniteSize() &&<br>
p_trans->GetSize() >= SIZE_MAX ) )<br>
                  {<br>
                      msg_Err( &sys.demuxer, "Chapter translate too big,<br>
aborting" );<br>
                      continue;<br>
@@ -1108,7 +1108,7 @@ void matroska_segment_c::<u></u>ParseAttachments(<br>
KaxAttachments *attachments )<br>
      EbmlElement *el;<br>
      int i_upper_level = 0;<br>
<br>
-    if( unlikely( attachments->GetSize() >= SIZE_MAX ) )<br>
+    if( unlikely( attachments->IsFiniteSize() && attachments->GetSize()<br>
 >= SIZE_MAX ) )<br>
      {<br>
          msg_Err( &sys.demuxer, "Attachments too big, aborting" );<br>
          return;<br>
@@ -1171,7 +1171,7 @@ void matroska_segment_c::<u></u>ParseChapters(<br>
KaxChapters *chapters )<br>
      int i_upper_level = 0;<br>
<br>
      /* Master elements */<br>
-    if( unlikely( chapters->GetSize() >= SIZE_MAX ) )<br>
+    if( unlikely( chapters->IsFiniteSize() && chapters->GetSize() >=<br>
SIZE_MAX ) )<br>
      {<br>
          msg_Err( &sys.demuxer, "Chapters too big, aborting" );<br>
          return;<br>
@@ -1245,7 +1245,7 @@ void matroska_segment_c::<u></u>ParseCluster( KaxCluster<br>
*cluster, bool b_update_start_<br>
<br>
      /* Master elements */<br>
      m = static_cast<EbmlMaster *>( cluster );<br>
-    if( unlikely( m->GetSize() >= SIZE_MAX ) )<br>
+    if( unlikely( m->IsFiniteSize() && m->GetSize() >= SIZE_MAX ) )<br>
      {<br>
          msg_Err( &sys.demuxer, "Cluster too big, aborting" );<br>
          return;<br>
--<br>
1.9.5.msysgit.0<br>
<br>
<br>
<br>
On Fri, Feb 20, 2015 at 7:34 PM, Steve Lhomme <<a href="mailto:robux4@gmail.com" target="_blank">robux4@gmail.com</a><br></div></div><span class="">
<mailto:<a href="mailto:robux4@gmail.com" target="_blank">robux4@gmail.com</a>>> wrote:<br>
<br>
    What's the symptom ?<br>
<br>
    On Fri, Feb 20, 2015 at 7:19 PM, Jean-Baptiste Kempf<br></span><span class="">
    <<a href="mailto:jb@videolan.org" target="_blank">jb@videolan.org</a> <mailto:<a href="mailto:jb@videolan.org" target="_blank">jb@videolan.org</a>>> wrote:<br>
<br>
        I don't seem able to apply this patch.<br>
<br>
        Le 20/02/2015 16:41, Steve Lhomme a écrit :<br>
<br>
            Replaces the previous similar patch from a few minutes ago<br>
            with more<br>
            checks.<br>
<br>
            ---<br>
               modules/demux/mkv/demux.cpp                  |  2 +-<br></span>
               modules/demux/mkv/matroska___<u></u>segment.cpp       | 12<br>
            ++++++------<br>
               modules/demux/mkv/matroska___<u></u>segment_parse.cpp | 14<span class=""><br>
            +++++++-------<br>
               3 files changed, 14 insertions(+), 14 deletions(-)<br>
<br>
            diff --git a/modules/demux/mkv/demux.cpp<br>
            b/modules/demux/mkv/demux.cpp<br>
            index 1feca55..21618f4 100644<br>
            --- a/modules/demux/mkv/demux.cpp<br>
            +++ b/modules/demux/mkv/demux.cpp<br>
            @@ -519,7 +519,7 @@ matroska_stream_c<br></span>
            *demux_sys_t::__<u></u>AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS<span class=""><br>
                                   // find the families of this segment<br>
                                   KaxInfo *p_info =<br>
            static_cast<KaxInfo*>(p_l1);<br>
                                   b_keep_segment = b_initial;<br>
            -                    if( unlikely( p_info->GetSize() >=<br>
            SIZE_MAX ) )<br>
            +                    if( unlikely( p_info->IsFiniteSize() &&<br>
            p_info->GetSize() >= SIZE_MAX ) )<br>
                                   {<br>
                                       msg_Err( p_demux, "KaxInfo too<br>
            big aborting" );<br>
                                       break;<br></span>
            diff --git a/modules/demux/mkv/matroska__<u></u>_segment.cpp<br>
            b/modules/demux/mkv/matroska__<u></u>_segment.cpp<br>
            index df24096..f71df70 100644<br>
            --- a/modules/demux/mkv/matroska__<u></u>_segment.cpp<br>
            +++ b/modules/demux/mkv/matroska__<u></u>_segment.cpp<span class=""><br>
            @@ -139,7 +139,7 @@ void matroska_segment_c::LoadCues(<br>
            KaxCues *cues )<br>
                                   KaxCueTime &ctime = *(KaxCueTime*)el;<br>
                                   try<br>
                                   {<br>
            -                        if( unlikely( ctime.GetSize() >=<br>
            SIZE_MAX ) )<br>
            +                        if( unlikely( ctime.IsFiniteSize() &&<br>
            ctime.GetSize() >= SIZE_MAX ) )<br>
                                       {<br>
                                           msg_Err( &sys.demuxer,<br>
            "CueTime size too<br>
            big");<br>
                                           b_invalid_cue = true;<br>
            @@ -162,7 +162,7 @@ void matroska_segment_c::LoadCues(<br>
            KaxCues *cues )<br>
                                   {<br>
                                       while( ( el = ep->Get() ) != NULL )<br>
                                       {<br>
            -                            if( unlikely( el->GetSize() >=<br>
            SIZE_MAX ) )<br>
            +                            if( unlikely( el->IsFiniteSize() &&<br>
            el->GetSize() >= SIZE_MAX ) )<br>
                                           {<br>
                                               ep->Up();<br>
                                               msg_Err( &sys.demuxer,<br>
            "Error %s too<br>
            big, aborting", typeid(*el).name() );<br>
            @@ -296,7 +296,7 @@ SimpleTag *<br></span>
            matroska_segment_c::__<u></u>ParseSimpleTags(<div><div class="h5"><br>
            KaxTagSimple *tag, int target_t<br>
                   {<br>
                       while( ( el = ep->Get() ) != NULL && size < max_size)<br>
                       {<br>
            -            if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
            +            if( unlikely( el->IsFiniteSize() &&<br>
            el->GetSize() >=<br>
            SIZE_MAX ) )<br>
                           {<br>
                               msg_Err( &sys.demuxer, "Error %s too big<br>
            ignoring the<br>
            tag", typeid(*el).name() );<br>
                               delete ep;<br>
            @@ -409,7 +409,7 @@ void matroska_segment_c::LoadTags(<br>
            KaxTags *tags )<br>
                                   {<br>
                                       try<br>
                                       {<br>
            -                            if( unlikely( el->GetSize() >=<br>
            SIZE_MAX ) )<br>
            +                            if( unlikely( el->IsFiniteSize() &&<br>
            el->GetSize() >= SIZE_MAX ) )<br>
                                           {<br>
                                               msg_Err( &sys.demuxer,<br>
            "Invalid size<br>
            while reading tag");<br>
                                               break;<br>
            @@ -1351,7 +1351,7 @@ int matroska_segment_c::BlockGet(<br>
            KaxBlock * &<br>
            pp_block, KaxSimpleBlock * & pp_s<br>
                                   }<br>
                                   break;<br>
                               case 2:<br>
            -                    if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
            +                    if( unlikely( el->IsFiniteSize() &&<br>
            el->GetSize()<br>
              >= SIZE_MAX ) )<br>
                                   {<br>
                                       msg_Err( &sys.demuxer, "Error<br>
            while reading<br>
            %s... upping level", typeid(*el).name());<br>
                                       ep->Up();<br>
            @@ -1388,7 +1388,7 @@ int matroska_segment_c::BlockGet(<br>
            KaxBlock * &<br>
            pp_block, KaxSimpleBlock * & pp_s<br>
                                   }<br>
                                   break;<br>
                               case 3:<br>
            -                    if( unlikely( el->GetSize() >= SIZE_MAX ) )<br>
            +                    if( unlikely( el->IsFiniteSize() &&<br>
            el->GetSize()<br>
              >= SIZE_MAX ) )<br>
                                   {<br>
                                       msg_Err( &sys.demuxer, "Error<br>
            while reading<br>
            %s... upping level", typeid(*el).name());<br>
                                       ep->Up();<br></div></div>
            diff --git a/modules/demux/mkv/matroska__<u></u>_segment_parse.cpp<br>
            b/modules/demux/mkv/matroska__<u></u>_segment_parse.cpp<br>
            index 751c824..fc80103 100644<br>
            --- a/modules/demux/mkv/matroska__<u></u>_segment_parse.cpp<br>
            +++ b/modules/demux/mkv/matroska__<u></u>_segment_parse.cpp<br>
            @@ -93,7 +93,7 @@ void matroska_segment_c::__<u></u>ParseSeekHead(<span class=""><br>
            KaxSeekHead<br>
            *seekhead )<br>
                           {<br>
                               while( ( l = ep->Get() ) != NULL )<br>
                               {<br>
            -                    if( unlikely( l->GetSize() >= SIZE_MAX ) )<br>
            +                    if( unlikely( l->IsFiniteSize() &&<br>
            l->GetSize() >=<br>
            SIZE_MAX ) )<br>
                                   {<br>
                                       msg_Err( &sys.demuxer,"%s too<br>
            big... skipping<br>
            it",  typeid(*l).name() );<br>
                                       continue;<br></span>
            @@ -745,7 +745,7 @@ void matroska_segment_c::__<u></u>ParseTracks(<span class=""><br>
            KaxTracks<br>
            *tracks )<br>
                   int i_upper_level = 0;<br>
<br>
                   /* Master elements */<br>
            -    if( unlikely( tracks->GetSize() >= SIZE_MAX ) )<br>
            +    if( unlikely( tracks->IsFiniteSize() &&<br>
            tracks->GetSize() >=<br>
            SIZE_MAX ) )<br>
                   {<br>
                       msg_Err( &sys.demuxer, "Track too big, aborting" );<br>
                       return;<br>
            @@ -786,7 +786,7 @@ void matroska_segment_c::ParseInfo(<br>
            KaxInfo *info )<br>
<br>
                   /* Master elements */<br>
                   m = static_cast<EbmlMaster *>(info);<br>
            -    if( unlikely( m->GetSize() >= SIZE_MAX ) )<br>
            +    if( unlikely( m->IsFiniteSize() && m->GetSize() >=<br>
            SIZE_MAX ) )<br>
                   {<br>
                       msg_Err( &sys.demuxer, "Info too big, aborting" );<br>
                       return;<br>
            @@ -914,7 +914,7 @@ void matroska_segment_c::ParseInfo(<br>
            KaxInfo *info )<br>
                           KaxChapterTranslate *p_trans =<br></span>
            static_cast<__<u></u>KaxChapterTranslate*>( l );<span class=""><br>
                           try<br>
                           {<br>
            -                if( unlikely( p_trans->GetSize() >=<br>
            SIZE_MAX ) )<br>
            +                if( unlikely( p_trans->IsFiniteSize() &&<br>
            p_trans->GetSize() >= SIZE_MAX ) )<br>
                               {<br>
                                   msg_Err( &sys.demuxer, "Chapter<br>
            translate too big,<br>
            aborting" );<br>
                                   continue;<br>
            @@ -1108,7 +1108,7 @@ void<br></span>
            matroska_segment_c::__<u></u>ParseAttachments(<span class=""><br>
            KaxAttachments *attachments )<br>
                   EbmlElement *el;<br>
                   int i_upper_level = 0;<br>
<br>
            -    if( unlikely( attachments->GetSize() >= SIZE_MAX ) )<br>
            +    if( unlikely( attachments->IsFiniteSize() &&<br>
            attachments->GetSize()<br>
              >= SIZE_MAX ) )<br>
                   {<br>
                       msg_Err( &sys.demuxer, "Attachments too big,<br>
            aborting" );<br>
                       return;<br></span>
            @@ -1171,7 +1171,7 @@ void matroska_segment_c::__<u></u>ParseChapters(<span class=""><br>
            KaxChapters *chapters )<br>
                   int i_upper_level = 0;<br>
<br>
                   /* Master elements */<br>
            -    if( unlikely( chapters->GetSize() >= SIZE_MAX ) )<br>
            +    if( unlikely( chapters->IsFiniteSize() &&<br>
            chapters->GetSize() >=<br>
            SIZE_MAX ) )<br>
                   {<br>
                       msg_Err( &sys.demuxer, "Chapters too big,<br>
            aborting" );<br>
                       return;<br>
            @@ -1245,7 +1245,7 @@ void<br></span>
            matroska_segment_c::__<u></u>ParseCluster( KaxCluster<span class=""><br>
            *cluster, bool b_update_start_<br>
<br>
                   /* Master elements */<br>
                   m = static_cast<EbmlMaster *>( cluster );<br>
            -    if( unlikely( m->GetSize() >= SIZE_MAX ) )<br>
            +    if( unlikely( m->IsFiniteSize() && m->GetSize() >=<br>
            SIZE_MAX ) )<br>
                   {<br>
                       msg_Err( &sys.demuxer, "Cluster too big, aborting" );<br>
                       return;<br>
<br>
<br>
<br>
        --<br>
        Jean-Baptiste Kempf<br>
        <a href="http://www.jbkempf.com/" target="_blank">http://www.jbkempf.com/</a> - <a href="tel:%2B33%20672%20704%20734" value="+33672704734" target="_blank">+33 672 704 734</a><br></span>
        <tel:%2B33%20672%20704%20734><span class=""><br>
        Sent from my Electronic Device<br></span>
        ______________________________<u></u>___________________<span class=""><br>
        vlc-devel mailing list<br>
        To unsubscribe or modify your subscription options:<br></span>
        <a href="https://mailman.videolan.org/__listinfo/vlc-devel" target="_blank">https://mailman.videolan.org/_<u></u>_listinfo/vlc-devel</a><br>
        <<a href="https://mailman.videolan.org/listinfo/vlc-devel" target="_blank">https://mailman.videolan.org/<u></u>listinfo/vlc-devel</a>><span class=""><br>
<br>
<br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
vlc-devel mailing list<br>
To unsubscribe or modify your subscription options:<br>
<a href="https://mailman.videolan.org/listinfo/vlc-devel" target="_blank">https://mailman.videolan.org/<u></u>listinfo/vlc-devel</a><br>
<br>
</span></blockquote><div class="HOEnZb"><div class="h5">
<br>
<br>
-- <br>
Jean-Baptiste Kempf<br>
<a href="http://www.jbkempf.com/" target="_blank">http://www.jbkempf.com/</a> - <a href="tel:%2B33%20672%20704%20734" value="+33672704734" target="_blank">+33 672 704 734</a><br>
Sent from my Electronic Device<br>
______________________________<u></u>_________________<br>
vlc-devel mailing list<br>
To unsubscribe or modify your subscription options:<br>
<a href="https://mailman.videolan.org/listinfo/vlc-devel" target="_blank">https://mailman.videolan.org/<u></u>listinfo/vlc-devel</a><br>
</div></div></blockquote></div><br></div>