summaryrefslogtreecommitdiff
path: root/pes2es.cpp
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2009-10-06 00:36:26 +0200
committerJochen Dolze <vdr@dolze.de>2009-10-06 00:36:26 +0200
commitc11caab8aa7f1e296694e2eaa4477d299adcd1e6 (patch)
tree64adfc0dbab11a45f804489f9f4bddbef720fb0c /pes2es.cpp
parentc69708374c62615009e2b92783dcea696166470e (diff)
downloadvdr-plugin-markad-c11caab8aa7f1e296694e2eaa4477d299adcd1e6.tar.gz
vdr-plugin-markad-c11caab8aa7f1e296694e2eaa4477d299adcd1e6.tar.bz2
Fixed TS packet processing (buffer overflows)
Added packet injection
Diffstat (limited to 'pes2es.cpp')
-rw-r--r--pes2es.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/pes2es.cpp b/pes2es.cpp
index 8d09e45..724cfea 100644
--- a/pes2es.cpp
+++ b/pes2es.cpp
@@ -41,9 +41,13 @@ void cMarkAdPES2ES::Process(MarkAdPid Pid, uchar *PESData, int PESSize, uchar **
return;
}
- int Length=(peshdr->LenH<<8)+peshdr->LenL+sizeof(PESHDR);
+ if (peshdr->StreamID<=0xBC) return;
+
+ int Length=(peshdr->LenH<<8)+peshdr->LenL;
+ if (Length) Length+=sizeof(PESHDR);
if (Length!=PESSize)
{
+ if ((peshdr->StreamID & 0xF0)==0xE0) return;
Reset();
return;
}
@@ -87,7 +91,6 @@ void cMarkAdPES2ES::Process(MarkAdPid Pid, uchar *PESData, int PESSize, uchar **
buf=&PESData[bpos];
buflen=PESSize-bpos;
}
-
queue->Put(buf,buflen);
}
if (type) *ESData=queue->GetPacket(ESSize,type);