Skip to content

Commit

Permalink
✨(icu_lib): fix RLE decoding and handle empty image data
Browse files Browse the repository at this point in the history
Corrected the index increment in the RLE decoding process to ensure proper data handling. Added a check for zero-sized image data, returning an empty `RgbaImage` when the data size is 0.

Signed-off-by: Benign X <[email protected]>
  • Loading branch information
W-Mai committed Dec 4, 2024
1 parent 50f3419 commit 91c057c
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 2 deletions.
4 changes: 4 additions & 0 deletions icu_lib/src/endecoder/lvgl/lvgl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@ impl EnDecoder for LVGL {
log::trace!("Decoding image with data size: {}", data.len());
let img_desc = ImageDescriptor::decode(data);

if img_desc.data_size == 0 {
return MiData::RGBA(RgbaImage::new(0, 0));
}

let header = &img_desc.header;

log::trace!("Decoding image with color format: {:?}", header.cf());
Expand Down
5 changes: 5 additions & 0 deletions icu_lib/src/endecoder/lvgl/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,11 @@ impl ImageDescriptor {
} else {
log::error!("Data size mismatch ideal_data_size: {idea_data_size}, data_size: {data_size}, {:#?}", header);
}
return Self {
header: ImageHeader::V9(header),
data_size: 0,
data: vec![],
};
}
ImageHeader::V8(_) => {}
ImageHeader::Unknown => {
Expand Down
4 changes: 2 additions & 2 deletions icu_lib/src/endecoder/utils/rle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,15 +130,15 @@ impl RleCoder {
if ctrl & 0x80 == 0 {
// Run-length mode
result.extend((0..ctrl).flat_map(|_| block.iter().copied()));
i += self.block_size;
} else {
// Direct copy mode
let count = (ctrl & 0x7f) as usize;
let bytes = count * self.block_size;
let slice = data.get(i..i + bytes).ok_or(RleError::InvalidInput)?;
result.extend_from_slice(slice);
i += bytes - self.block_size;
i += bytes;
}
i += self.block_size;
}

Ok(result)
Expand Down

0 comments on commit 91c057c

Please sign in to comment.