summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/lcldec.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/libavcodec/lcldec.c b/libavcodec/lcldec.c
index 9589b93b8d..66d1878045 100644
--- a/libavcodec/lcldec.c
+++ b/libavcodec/lcldec.c
@@ -73,7 +73,7 @@ typedef struct LclDecContext {
/**
- * \param srcptr compressed source buffer, must be padded with at least 4 extra bytes
+ * \param srcptr compressed source buffer, must be padded with at least 5 extra bytes
* \param destptr must be padded sufficiently for av_memcpy_backptr
*/
static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsigned char * destptr, unsigned int destsize)
@@ -81,16 +81,11 @@ static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsign
unsigned char *destptr_bak = destptr;
unsigned char *destptr_end = destptr + destsize;
const unsigned char *srcptr_end = srcptr + srclen;
- unsigned char mask = 0;
- unsigned char maskbit = 0;
+ unsigned char mask = *srcptr++;
+ unsigned char maskbit = 0x80;
unsigned int ofs, cnt;
while (srcptr < srcptr_end && destptr < destptr_end) {
- if (maskbit == 0) {
- mask = *srcptr++;
- maskbit = 0x80;
- continue;
- }
if (!(mask & maskbit)) {
memcpy(destptr, srcptr, 4);
destptr += 4;
@@ -105,6 +100,10 @@ static unsigned int mszh_decomp(const unsigned char * srcptr, int srclen, unsign
destptr += cnt;
}
maskbit >>= 1;
+ if (!maskbit) {
+ mask = *srcptr++;
+ maskbit = 0x80;
+ }
}
return destptr - destptr_bak;