fix(cliprdr): OOM via decode_png and vector allocation (#411)

This commit is contained in:
Norbert Szetei
2024-03-12 00:34:28 +09:00
committed by GitHub
parent ef2c3df761
commit 8c4c640905
2 changed files with 6 additions and 1 deletions
+6 -1
View File
@@ -703,7 +703,12 @@ fn decode_png(mut input: &[u8]) -> Result<(png::OutputInfo, Vec<u8>), BitmapErro
decoder.set_transformations(png::Transformations::ALPHA | png::Transformations::EXPAND);
let mut reader = decoder.read_info()?;
let mut buffer = vec![0; reader.output_buffer_size()];
let output_buffer_len = reader.output_buffer_size();
// Prevent allocation of huge buffers.
ensure(output_buffer_len <= MAX_BUFFER_SIZE).ok_or(BitmapError::BufferTooBig)?;
let mut buffer = vec![0; output_buffer_len];
let info = reader.next_frame(&mut buffer)?;
buffer.truncate(info.buffer_size());