From 92b4203644593e595b34094b5acafeb37219fa41 Mon Sep 17 00:00:00 2001 From: Johns Date: Fri, 19 Oct 2012 15:36:41 +0200 Subject: Fix bug: possible endless loop in pes audio parser. --- ChangeLog | 1 + softhddev.c | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1a9c873..eec4301 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ User johns Date: + Fix bug: with some streams endless loop in pes audio parser. Report correct video size in cSoftHdDevice::GetVideoSize. Add picture adjustment support for vdpau. Revert "mpeg_vdpau" back to "mpegvideo_vdpau". diff --git a/softhddev.c b/softhddev.c index d2eee03..5b48fa8 100644 --- a/softhddev.c +++ b/softhddev.c @@ -718,13 +718,16 @@ static void PesParse(PesDemux * pesdx, const uint8_t * data, int size, // have header upto size bits if (pesdx->HeaderIndex == PES_HEADER_SIZE) { - if ((pesdx->Header[6] & 0xC0) == 0x80) { - pesdx->HeaderSize += pesdx->Header[8]; - } else { + if ((pesdx->Header[6] & 0xC0) != 0x80) { Error(_("pesdemux: mpeg1 pes packet unsupported\n")); pesdx->State = PES_SKIP; return; } + // have pes extension + if (!pesdx->Header[8]) { + goto empty_header; + } + pesdx->HeaderSize += pesdx->Header[8]; // have complete header } else if (pesdx->HeaderIndex == pesdx->HeaderSize) { int64_t pts; @@ -753,6 +756,7 @@ static void PesParse(PesDemux * pesdx, const uint8_t * data, int size, pts, dts); } + empty_header: pesdx->State = PES_INIT; if (pesdx->StartCode == PES_PRIVATE_STREAM1) { // only private stream 1, has sub streams -- cgit v1.2.3