Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>tags/n0.10
| @@ -96,7 +96,13 @@ static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsign | |||||
| ofs = FFMIN(ofs, destptr - destptr_bak); | ofs = FFMIN(ofs, destptr - destptr_bak); | ||||
| cnt *= 4; | cnt *= 4; | ||||
| cnt = FFMIN(cnt, destptr_end - destptr); | cnt = FFMIN(cnt, destptr_end - destptr); | ||||
| av_memcpy_backptr(destptr, ofs, cnt); | |||||
| if (ofs) { | |||||
| av_memcpy_backptr(destptr, ofs, cnt); | |||||
| } else { | |||||
| // Not known what the correct behaviour is, but | |||||
| // this at least avoids uninitialized data. | |||||
| memset(destptr, 0, cnt); | |||||
| } | |||||
| destptr += cnt; | destptr += cnt; | ||||
| } | } | ||||
| maskbit >>= 1; | maskbit >>= 1; | ||||
| @@ -67,9 +67,6 @@ int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); | |||||
| * | * | ||||
| * cnt > back is valid, this will copy the bytes we just copied, | * cnt > back is valid, this will copy the bytes we just copied, | ||||
| * thus creating a repeating pattern with a period length of back. | * thus creating a repeating pattern with a period length of back. | ||||
| * Note that lcldec currently can set back == 0 - which is wrong and | |||||
| * makes no sense, but the code should at least avoid crashing or hanging | |||||
| * for this case. | |||||
| */ | */ | ||||
| void av_memcpy_backptr(uint8_t *dst, int back, int cnt); | void av_memcpy_backptr(uint8_t *dst, int back, int cnt); | ||||