cafdec: fix overflow checking in read_header()
authorXi Wang <xi.wang@gmail.com>
Sun, 20 Jan 2013 20:26:12 +0000 (15:26 -0500)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 20 Jan 2013 20:30:34 +0000 (21:30 +0100)
Several compilers such as clang/icc/pathscale will optimize the check
pos + size < pos (assuming size > 0) into false, since signed integer
overflow is undefined behavior in C.  This breaks overflow checking.
Use a safe precondition check instead.

Signed-off-by: Xi Wang <xi.wang@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/cafdec.c

index f12226a..337758e 100644 (file)
@@ -300,7 +300,7 @@ static int read_header(AVFormatContext *s)
         }
 
         if (size > 0) {
-            if (pos + size < pos)
+            if (pos > INT64_MAX - size)
                 return AVERROR_INVALIDDATA;
             avio_skip(pb, FFMAX(0, pos + size - avio_tell(pb)));
         }