summaryrefslogtreecommitdiff
path: root/libavcodec/rangecoder.h
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2017-08-14 00:15:54 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2017-08-18 11:33:14 +0200
commitc359c51947c9ac925cc4a5d1893ef20ea1d3b4c8 (patch)
tree1e2dd2fe1b0c0308340cfc89174b62b5f822aa4b /libavcodec/rangecoder.h
parentf4544163b27615ecfff1b42d6acdb3672ac92399 (diff)
avcodec/rangecoder: Do not increase the pointer beyond the buffer
Fixes: undefined behavior Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/rangecoder.h')
-rw-r--r--libavcodec/rangecoder.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/libavcodec/rangecoder.h b/libavcodec/rangecoder.h
index c3e81d0dcb..44af88b8f5 100644
--- a/libavcodec/rangecoder.h
+++ b/libavcodec/rangecoder.h
@@ -42,6 +42,8 @@ typedef struct RangeCoder {
uint8_t *bytestream_start;
uint8_t *bytestream;
uint8_t *bytestream_end;
+ int overread;
+#define MAX_OVERREAD 2
} RangeCoder;
void ff_init_range_encoder(RangeCoder *c, uint8_t *buf, int buf_size);
@@ -106,9 +108,11 @@ static inline void refill(RangeCoder *c)
if (c->range < 0x100) {
c->range <<= 8;
c->low <<= 8;
- if (c->bytestream < c->bytestream_end)
+ if (c->bytestream < c->bytestream_end) {
c->low += c->bytestream[0];
- c->bytestream++;
+ c->bytestream++;
+ } else
+ c->overread ++;
}
}