From 223fb7a44ced1e9597ea46fe45b56e9174862f56 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 20 Mar 2018 11:24:56 +0100 Subject: [PATCH] dvb psi: fix the 'improve section parser' commit, fixes #5005 --- src/input/mpegts/dvb_psi_lib.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/input/mpegts/dvb_psi_lib.c b/src/input/mpegts/dvb_psi_lib.c index 5796ecf9b..c97d51059 100644 --- a/src/input/mpegts/dvb_psi_lib.c +++ b/src/input/mpegts/dvb_psi_lib.c @@ -167,31 +167,31 @@ mpegts_psi_section_reassemble } if(pusi) { - uint8_t len = tsb[off++]; - if (len > 188 - off) { - mt->mt_sect.ps_lock = 0; - return; - } - while (off < len) { - r = mpegts_psi_section_reassemble0(mt, logprefix, tsb + off, len, 0, crc, cb, opaque); - if (r < 0) { - mt->mt_sect.ps_lock = 0; - off = 188; - break; - } - off += r; + uint8_t len2 = tsb[off++]; + uint8_t off2 = off; + off += len2; + if (off > 188) + goto wrong_state; + while (off2 < len2) { + r = mpegts_psi_section_reassemble0(mt, logprefix, tsb + off2, len2, 0, crc, cb, opaque); + if (r < 0) + goto wrong_state; + off2 += r; + len2 -= r; } } while(off < 188) { r = mpegts_psi_section_reassemble0(mt, logprefix, tsb + off, 188 - off, pusi, crc, cb, opaque); - if(r < 0) { - mt->mt_sect.ps_lock = 0; - break; - } + if (r < 0) + goto wrong_state; off += r; } + return; + +wrong_state: + mt->mt_sect.ps_lock = 0; } /* -- 2.47.3