aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2013-03-05 17:12:35 +0100
committerReinhard Tartler <siretart@tauware.de>2013-05-09 11:29:01 +0200
commit6d4d186e9e9fcba9f9058691ab00eade028fceff (patch)
tree70bf50016348958f18340f3e2fd19bb89d0b417c
parent5ebb5a32bdd910a8afb316c51ed0b322f5600ae5 (diff)
downloadffmpeg-6d4d186e9e9fcba9f9058691ab00eade028fceff.tar.gz
shorten: use the unsigned type where needed
get_uint returns an unsigned value, use an unsigned to store blocksize to make sure the comparison logic is correct and report correctly the error for the channel count not supported. CC: libav-stable@libav.org (cherry picked from commit 5cf7c72757779a740e897a97710aac044fe5258c) (cherry picked from commit 88089eecfd7e604d40d078b4f4206c647cb2e2b4) (cherry picked from commit f42d03746afe491dd02bb6372961e85e78299864) Signed-off-by: Luca Barbato <lu_zero@gentoo.org> Signed-off-by: Reinhard Tartler <siretart@tauware.de> Conflicts: libavcodec/shorten.c
-rw-r--r--libavcodec/shorten.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
index b5473dd10f..3ca2835a31 100644
--- a/libavcodec/shorten.c
+++ b/libavcodec/shorten.c
@@ -78,7 +78,7 @@ typedef struct ShortenContext {
GetBitContext gb;
int min_framesize, max_framesize;
- int channels;
+ unsigned channels;
int32_t *decoded[MAX_CHANNELS];
int32_t *decoded_base[MAX_CHANNELS];
@@ -342,6 +342,10 @@ static int shorten_decode_frame(AVCodecContext *avctx,
s->internal_ftype = get_uint(s, TYPESIZE);
s->channels = get_uint(s, CHANSIZE);
+ if (!s->channels) {
+ av_log(s->avctx, AV_LOG_ERROR, "No channels reported\n");
+ return AVERROR_INVALIDDATA;
+ }
if (s->channels <= 0 || s->channels > MAX_CHANNELS) {
av_log(s->avctx, AV_LOG_ERROR, "too many channels: %d\n", s->channels);
s->channels = 0;
@@ -501,7 +505,7 @@ static int shorten_decode_frame(AVCodecContext *avctx,
s->bitshift = get_ur_golomb_shorten(&s->gb, BITSHIFTSIZE);
break;
case FN_BLOCKSIZE: {
- int blocksize = get_uint(s, av_log2(s->blocksize));
+ unsigned blocksize = get_uint(s, av_log2(s->blocksize));
if (blocksize > s->blocksize) {
av_log(avctx, AV_LOG_ERROR, "Increasing block size is not supported\n");
return AVERROR_PATCHWELCOME;