From a96b39de622592cb595bf20ae009ed415b98cde9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Sat, 20 Oct 2012 21:21:34 +0200 Subject: [PATCH] lavf/srtdec: simplify start/end computation. Also fix potential overflow (CID733778) --- libavformat/srtdec.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/libavformat/srtdec.c b/libavformat/srtdec.c index a66ced377e..056165e311 100644 --- a/libavformat/srtdec.c +++ b/libavformat/srtdec.c @@ -53,19 +53,16 @@ static int srt_read_header(AVFormatContext *s) static int64_t get_pts(const char *buf, int *duration) { - int i, hour, min, sec, hsec; - int he, me, se, mse; + int i; for (i=0; i<2; i++) { - int64_t start, end; + int hh1, mm1, ss1, ms1; + int hh2, mm2, ss2, ms2; if (sscanf(buf, "%d:%2d:%2d%*1[,.]%3d --> %d:%2d:%2d%*1[,.]%3d", - &hour, &min, &sec, &hsec, &he, &me, &se, &mse) == 8) { - min += 60*hour; - sec += 60*min; - start = sec*1000+hsec; - me += 60*he; - se += 60*me; - end = se*1000+mse; + &hh1, &mm1, &ss1, &ms1, + &hh2, &mm2, &ss2, &ms2) == 8) { + int64_t start = (hh1*3600LL + mm1*60LL + ss1) * 1000LL + ms1; + int64_t end = (hh2*3600LL + mm2*60LL + ss2) * 1000LL + ms2; *duration = end - start; return start; }