Wrong state handling causing decompression errors in some cases

Originally committed as revision 4852 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Reimar Döffinger 19 years ago
parent f3b6010916
commit d66fbc14de
  1. 4
      libavcodec/lzo.c

@ -118,7 +118,6 @@ int lzo1x_decode(void *out, int *outlen, void *in, int *inlen) {
while (!c.error) { while (!c.error) {
int cnt, back; int cnt, back;
if (x >> 4) { if (x >> 4) {
state = BACKPTR;
if (x >> 6) { if (x >> 6) {
cnt = (x >> 5) - 1; cnt = (x >> 5) - 1;
back = (get_byte(&c) << 3) + ((x >> 2) & 7) + 1; back = (get_byte(&c) << 3) + ((x >> 2) & 7) + 1;
@ -155,10 +154,9 @@ int lzo1x_decode(void *out, int *outlen, void *in, int *inlen) {
} }
copy_backptr(&c, back, cnt + 2); copy_backptr(&c, back, cnt + 2);
cnt = x & 3; cnt = x & 3;
state = cnt ? BACKPTR : COPY;
if (cnt) if (cnt)
copy(&c, cnt); copy(&c, cnt);
else
state = (state == COPY) ? BACKPTR : COPY;
x = get_byte(&c); x = get_byte(&c);
} }
*inlen = c.in_end - c.in; *inlen = c.in_end - c.in;

Loading…
Cancel
Save