|
|
@@ -461,7 +461,7 @@ static int huf_build_dec_table(const uint64_t *hcode, int im, |
|
|
lc += 8; \ |
|
|
lc += 8; \ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#define get_code(po, rlc, c, lc, gb, out, oe) \ |
|
|
|
|
|
|
|
|
#define get_code(po, rlc, c, lc, gb, out, oe, outb) \ |
|
|
{ \ |
|
|
{ \ |
|
|
if (po == rlc) { \ |
|
|
if (po == rlc) { \ |
|
|
if (lc < 8) \ |
|
|
if (lc < 8) \ |
|
|
@@ -470,7 +470,7 @@ static int huf_build_dec_table(const uint64_t *hcode, int im, |
|
|
\ |
|
|
\ |
|
|
cs = c >> lc; \ |
|
|
cs = c >> lc; \ |
|
|
\ |
|
|
\ |
|
|
if (out + cs > oe) \ |
|
|
|
|
|
|
|
|
if (out + cs > oe || out == outb) \ |
|
|
return AVERROR_INVALIDDATA; \ |
|
|
return AVERROR_INVALIDDATA; \ |
|
|
\ |
|
|
\ |
|
|
s = out[-1]; \ |
|
|
s = out[-1]; \ |
|
|
@@ -503,7 +503,7 @@ static int huf_decode(const uint64_t *hcode, const HufDec *hdecod, |
|
|
|
|
|
|
|
|
if (pl.len) { |
|
|
if (pl.len) { |
|
|
lc -= pl.len; |
|
|
lc -= pl.len; |
|
|
get_code(pl.lit, rlc, c, lc, gb, out, oe); |
|
|
|
|
|
|
|
|
get_code(pl.lit, rlc, c, lc, gb, out, oe, outb); |
|
|
} else { |
|
|
} else { |
|
|
int j; |
|
|
int j; |
|
|
|
|
|
|
|
|
@@ -520,7 +520,7 @@ static int huf_decode(const uint64_t *hcode, const HufDec *hdecod, |
|
|
if ((hcode[pl.p[j]] >> 6) == |
|
|
if ((hcode[pl.p[j]] >> 6) == |
|
|
((c >> (lc - l)) & ((1LL << l) - 1))) { |
|
|
((c >> (lc - l)) & ((1LL << l) - 1))) { |
|
|
lc -= l; |
|
|
lc -= l; |
|
|
get_code(pl.p[j], rlc, c, lc, gb, out, oe); |
|
|
|
|
|
|
|
|
get_code(pl.p[j], rlc, c, lc, gb, out, oe, outb); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@@ -541,7 +541,7 @@ static int huf_decode(const uint64_t *hcode, const HufDec *hdecod, |
|
|
|
|
|
|
|
|
if (pl.len) { |
|
|
if (pl.len) { |
|
|
lc -= pl.len; |
|
|
lc -= pl.len; |
|
|
get_code(pl.lit, rlc, c, lc, gb, out, oe); |
|
|
|
|
|
|
|
|
get_code(pl.lit, rlc, c, lc, gb, out, oe, outb); |
|
|
} else { |
|
|
} else { |
|
|
return AVERROR_INVALIDDATA; |
|
|
return AVERROR_INVALIDDATA; |
|
|
} |
|
|
} |
|
|
|