Skip to content

Commit d28963a

Browse files
committed
Avoid oom situations
1 parent 027f10c commit d28963a

File tree

3 files changed

+9
-7
lines changed

3 files changed

+9
-7
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ Cargo.lock
44
.DS_Store
55
/image.png
66
/.vscode
7+
/.idea

src/mask.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,10 @@ impl Mask {
192192
let output_buffer_size = reader
193193
.output_buffer_size()
194194
.ok_or(png::DecodingError::LimitsExceeded)?;
195-
let mut img_data = vec![0; output_buffer_size];
195+
let mut img_data = Vec::new();
196+
img_data
197+
.try_reserve_exact(output_buffer_size)
198+
.map_err(|_| make_custom_png_error("failed to reserve output buffer"))?;
196199
let info = reader.next_frame(&mut img_data)?;
197200

198201
if info.bit_depth != png::BitDepth::Eight {

src/pixmap.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,11 @@ impl Pixmap {
4444
let size = IntSize::from_wh(width, height)?;
4545
let data_len = data_len_for_size(size)?;
4646

47-
// We cannot check that allocation was successful yet.
48-
// We have to wait for https://github.com/rust-lang/rust/issues/48043
47+
let mut data = Vec::new();
48+
data.try_reserve_exact(data_len).ok()?;
49+
data.resize(data_len, 0);
4950

50-
Some(Pixmap {
51-
data: vec![0; data_len],
52-
size,
53-
})
51+
Some(Pixmap { data, size })
5452
}
5553

5654
/// Creates a new pixmap by taking ownership over an image buffer

0 commit comments

Comments
 (0)