[PATCH] demux_mpg: Limit how much data probing reads.

Reimar Döffinger <[email protected]>
Newsgroups gmane.comp.video.mplayer.devel
Message-ID <[email protected]>
Limits data read during probe to 4 MB.
Reading more data can take a long time and also
causes issues with non-seekable streams that only
have the cache to seek back in.
It also increases the chances for false positives.
It might break autodetection of heavily corrupted
files, but that seems like a reasonable compromise.

_______________________________________________
MPlayer-dev-eng mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
mpgprobe.diff (text/x-diff, 1.4 KB)
Index: libmpdemux/demux_mpg.c
===================================================================
--- libmpdemux/demux_mpg.c	(revision 37653)
+++ libmpdemux/demux_mpg.c	(working copy)
@@ -318,7 +318,6 @@
 //  if(id==0x1BA) packet_start_pos=stream_tell(demux->stream);
   if((id<0x1BC || id>=0x1F0) && id != 0x1FD) return -1;
   if(id==0x1BE) return -1; // padding stream
-  if(id==0x1BF) return -1; // private2
 
   len=stream_read_word(demux->stream);
   mp_dbg(MSGT_DEMUX,MSGL_DBG3,"PACKET len=%d",len);
@@ -330,6 +329,9 @@
 
   mpeg_pts_error=0;
 
+  if(id==0x1BF) { // private2
+    return -1;
+  }
   if(id==0x1BC) {
     parse_psm(demux, len);
     return 0;
@@ -688,6 +690,7 @@
   off_t tmppos;
   int file_format = DEMUXER_TYPE_UNKNOWN;
 
+  demuxer->synced = -1;
   tmppos=stream_tell(demuxer->stream);
   tmp=stream_read_dword(demuxer->stream);
   if(tmp==0x1E0 || tmp==0x1C0) {
@@ -832,6 +835,12 @@
 int skipped=0;
 int max_packs=2048;
 int ret=0;
+uint64_t end_pos = 0;
+if (demux->synced == -1) {
+  // limit to 4 MB during probing
+  end_pos = stream_tell(demux->stream) + 4*1024*1024;
+  demux->synced = 0;
+}
 
 // System stream
 do{
@@ -858,6 +867,8 @@
    }
    demux->filepos+=skipped;
   }
+  if (end_pos && end_pos < demux->filepos)
+    demux->stream->eof = 1;
   if(stream_eof(demux->stream)) break;
   // sure: head=0x000001XX
   mp_dbg(MSGT_DEMUX,MSGL_DBG4,"*** head=0x%X\n",head);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.