diff options
Diffstat (limited to 'lib/lzo')
| -rw-r--r-- | lib/lzo/lzo1x_compress.c | 9 | ||||
| -rw-r--r-- | lib/lzo/lzo1x_decompress_safe.c | 4 | 
2 files changed, 7 insertions, 6 deletions
| diff --git a/lib/lzo/lzo1x_compress.c b/lib/lzo/lzo1x_compress.c index 4525fb094844..a8ede77afe0d 100644 --- a/lib/lzo/lzo1x_compress.c +++ b/lib/lzo/lzo1x_compress.c @@ -291,13 +291,14 @@ int lzogeneric1x_1_compress(const unsigned char *in, size_t in_len,  {  	const unsigned char *ip = in;  	unsigned char *op = out; +	unsigned char *data_start;  	size_t l = in_len;  	size_t t = 0;  	signed char state_offset = -2;  	unsigned int m4_max_offset; -	// LZO v0 will never write 17 as first byte, -	// so this is used to version the bitstream +	// LZO v0 will never write 17 as first byte (except for zero-length +	// input), so this is used to version the bitstream  	if (bitstream_version > 0) {  		*op++ = 17;  		*op++ = bitstream_version; @@ -306,6 +307,8 @@ int lzogeneric1x_1_compress(const unsigned char *in, size_t in_len,  		m4_max_offset = M4_MAX_OFFSET_V0;  	} +	data_start = op; +  	while (l > 20) {  		size_t ll = l <= (m4_max_offset + 1) ? l : (m4_max_offset + 1);  		uintptr_t ll_end = (uintptr_t) ip + ll; @@ -324,7 +327,7 @@ int lzogeneric1x_1_compress(const unsigned char *in, size_t in_len,  	if (t > 0) {  		const unsigned char *ii = in + in_len - t; -		if (op == out && t <= 238) { +		if (op == data_start && t <= 238) {  			*op++ = (17 + t);  		} else if (t <= 3) {  			op[state_offset] |= t; diff --git a/lib/lzo/lzo1x_decompress_safe.c b/lib/lzo/lzo1x_decompress_safe.c index 6d2600ea3b55..9e07e9ef1aad 100644 --- a/lib/lzo/lzo1x_decompress_safe.c +++ b/lib/lzo/lzo1x_decompress_safe.c @@ -54,11 +54,9 @@ int lzo1x_decompress_safe(const unsigned char *in, size_t in_len,  	if (unlikely(in_len < 3))  		goto input_overrun; -	if (likely(*ip == 17)) { +	if (likely(in_len >= 5) && likely(*ip == 17)) {  		bitstream_version = ip[1];  		ip += 2; -		if (unlikely(in_len < 5)) -			goto input_overrun;  	} else {  		bitstream_version = 0;  	} |