summaryrefslogtreecommitdiff
path: root/libavformat/mpegts.c
diff options
context:
space:
mode:
authorAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>2016-11-07 23:37:59 +0100
committerAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>2016-11-08 22:27:11 +0100
commit1bbb18fe82fc77a10d45fa53bd2738d2c54de6c6 (patch)
tree1f1ed993008e61f42270f709ccf684360e279058 /libavformat/mpegts.c
parentff100c9dd97d2f1f456ff38b192edf84f9744738 (diff)
mpegts: prevent division by zero
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Diffstat (limited to 'libavformat/mpegts.c')
-rw-r--r--libavformat/mpegts.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index fad10c6b06..0aa0ad77b8 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -2681,8 +2681,17 @@ static int mpegts_read_header(AVFormatContext *s)
packet_count[nb_pcrs] = nb_packets;
pcrs[nb_pcrs] = pcr_h * 300 + pcr_l;
nb_pcrs++;
- if (nb_pcrs >= 2)
- break;
+ if (nb_pcrs >= 2) {
+ if (pcrs[1] - pcrs[0] > 0) {
+ /* the difference needs to be positive to make sense for bitrate computation */
+ break;
+ } else {
+ av_log(ts->stream, AV_LOG_WARNING, "invalid pcr pair %"PRId64" >= %"PRId64"\n", pcrs[0], pcrs[1]);
+ pcrs[0] = pcrs[1];
+ packet_count[0] = packet_count[1];
+ nb_pcrs--;
+ }
+ }
} else {
finished_reading_packet(s, ts->raw_packet_size);
}