Commit 2d4f6b2f authored by reimar's avatar reimar

Fix buffer end checks in lzo copy code to work in all cases.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@7731 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 76d77edf
...@@ -67,11 +67,11 @@ static inline int get_len(LZOContext *c, int x, int mask) { ...@@ -67,11 +67,11 @@ static inline int get_len(LZOContext *c, int x, int mask) {
static inline void copy(LZOContext *c, int cnt) { static inline void copy(LZOContext *c, int cnt) {
register uint8_t *src = c->in; register uint8_t *src = c->in;
register uint8_t *dst = c->out; register uint8_t *dst = c->out;
if (src + cnt > c->in_end) { if (src + cnt > c->in_end || src + cnt < src) {
cnt = c->in_end - src; cnt = c->in_end - src;
c->error |= LZO_INPUT_DEPLETED; c->error |= LZO_INPUT_DEPLETED;
} }
if (dst + cnt > c->out_end) { if (dst + cnt > c->out_end || dst + cnt < dst) {
cnt = c->out_end - dst; cnt = c->out_end - dst;
c->error |= LZO_OUTPUT_FULL; c->error |= LZO_OUTPUT_FULL;
} }
...@@ -101,11 +101,11 @@ static inline void copy(LZOContext *c, int cnt) { ...@@ -101,11 +101,11 @@ static inline void copy(LZOContext *c, int cnt) {
static inline void copy_backptr(LZOContext *c, int back, int cnt) { static inline void copy_backptr(LZOContext *c, int back, int cnt) {
register uint8_t *src = &c->out[-back]; register uint8_t *src = &c->out[-back];
register uint8_t *dst = c->out; register uint8_t *dst = c->out;
if (src < c->out_start) { if (src < c->out_start || src > dst) {
c->error |= LZO_INVALID_BACKPTR; c->error |= LZO_INVALID_BACKPTR;
return; return;
} }
if (dst + cnt > c->out_end) { if (dst + cnt > c->out_end || dst + cnt < dst) {
cnt = c->out_end - dst; cnt = c->out_end - dst;
c->error |= LZO_OUTPUT_FULL; c->error |= LZO_OUTPUT_FULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment