lib/lzo: bugfix when input data is not compressed
When the input data is not compressed at all, lzo1x_decompress_safe will fail, so call memcpy() instead. Signed-off-by: Joris Lijssens <joris.lijssens@gmail.com>
This commit is contained in:
parent
96044745cb
commit
a2cfc8d593
@ -98,18 +98,25 @@ int lzop_decompress(const unsigned char *src, size_t src_len,
|
|||||||
if (dlen > remaining)
|
if (dlen > remaining)
|
||||||
return LZO_E_OUTPUT_OVERRUN;
|
return LZO_E_OUTPUT_OVERRUN;
|
||||||
|
|
||||||
/* decompress */
|
/* When the input data is not compressed at all,
|
||||||
tmp = dlen;
|
* lzo1x_decompress_safe will fail, so call memcpy()
|
||||||
r = lzo1x_decompress_safe((u8 *) src, slen, dst, &tmp);
|
* instead */
|
||||||
|
if (dlen == slen) {
|
||||||
|
memcpy(dst, src, slen);
|
||||||
|
} else {
|
||||||
|
/* decompress */
|
||||||
|
tmp = dlen;
|
||||||
|
r = lzo1x_decompress_safe((u8 *)src, slen, dst, &tmp);
|
||||||
|
|
||||||
if (r != LZO_E_OK) {
|
if (r != LZO_E_OK) {
|
||||||
*dst_len = dst - start;
|
*dst_len = dst - start;
|
||||||
return r;
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dlen != tmp)
|
||||||
|
return LZO_E_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dlen != tmp)
|
|
||||||
return LZO_E_ERROR;
|
|
||||||
|
|
||||||
src += slen;
|
src += slen;
|
||||||
dst += dlen;
|
dst += dlen;
|
||||||
remaining -= dlen;
|
remaining -= dlen;
|
||||||
|
Loading…
Reference in New Issue
Block a user