diff --git a/radio/src/thirdparty/libopenui/src/bitmapbuffer.h b/radio/src/thirdparty/libopenui/src/bitmapbuffer.h index f875368dc..ea7a3c1f4 100755 --- a/radio/src/thirdparty/libopenui/src/bitmapbuffer.h +++ b/radio/src/thirdparty/libopenui/src/bitmapbuffer.h @@ -199,32 +199,33 @@ class RLEBitmap: free(data); } - static int decode(uint8_t * dest, unsigned int dest_size, const unsigned char* src) + static int decode(uint8_t * dest, unsigned int destSize, const uint8_t * src) { - //unsigned char count = 0; - unsigned char prev_byte = 0; - bool prev_byte_valid = false; + uint8_t prevByte = 0; + bool prevByteValid = false; - const unsigned char * dest_end = dest + dest_size; - unsigned char * d = dest; + const uint8_t * destEnd = dest + destSize; + uint8_t * d = dest; - while (d < dest_end) { - *d++ = *src; - if (prev_byte_valid && (*src == prev_byte)) { - src++; + while (d < destEnd) { + uint8_t byte = *src++; + *d++ = byte; - if (d + *src > dest + dest_size) { -// TRACE("rle_decode_8bit: destination overflow!\n"); + if (prevByteValid && byte == prevByte) { + uint8_t count = *src++; + + if (d + count > destEnd) { + TRACE("rle_decode_8bit: destination overflow!\n"); return -1; } - memset(d, prev_byte, *src); - d += *src++; - prev_byte_valid = false; + memset(d, byte, count); + d += count; + prevByteValid = false; } else { - prev_byte = *src++; - prev_byte_valid = true; + prevByte = byte; + prevByteValid = true; } }