aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-07-10 15:12:26 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-07-29 04:58:48 +0200
commit69636b443c4f40286135ad9658b5d44a9de4f3a4 (patch)
tree06a84deb6ee2186a4603435847e07156a1528d9f
parenta45935fe052dbd166283fb703ad64876110d3ef0 (diff)
downloadffmpeg-69636b443c4f40286135ad9658b5d44a9de4f3a4.tar.gz
avcodec/golomb: Prevent shift by negative number
This happened in get_ue_golomb() if the cached bitstream reader was in use, because there was no check to handle the case of the read value not being in the supported range. For consistency with the uncached bitstream reader and for compliance with the documentation, every value not in the 0-8190 range is treated as error although the cached bitstream reader could actually read values in the range 0..65534 without problems. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r--libavcodec/golomb.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h
index 1f988d74aa..aed9b22471 100644
--- a/libavcodec/golomb.h
+++ b/libavcodec/golomb.h
@@ -66,9 +66,12 @@ static inline int get_ue_golomb(GetBitContext *gb)
return ff_ue_golomb_vlc_code[buf];
} else {
int log = 2 * av_log2(buf) - 31;
+
+ skip_bits_long(gb, 32 - log);
+ if (log < 7)
+ return AVERROR_INVALIDDATA;
buf >>= log;
buf--;
- skip_bits_long(gb, 32 - log);
return buf;
}