diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3ee7f31..10a5453 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -57,7 +57,7 @@ jobs: run: cargo test wasm: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 @@ -90,7 +90,7 @@ jobs: run: cargo test --target wasm32-wasip1 aarch64: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index 0e24d41..46a036e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Cargo.lock .DS_Store /image.png /.vscode +/.idea diff --git a/src/pixmap.rs b/src/pixmap.rs index 7217995..a00ebb3 100644 --- a/src/pixmap.rs +++ b/src/pixmap.rs @@ -44,13 +44,11 @@ impl Pixmap { let size = IntSize::from_wh(width, height)?; let data_len = data_len_for_size(size)?; - // We cannot check that allocation was successful yet. - // We have to wait for https://github.com/rust-lang/rust/issues/48043 + let mut data = Vec::new(); + data.try_reserve_exact(data_len).ok()?; + data.resize(data_len, 0); - Some(Pixmap { - data: vec![0; data_len], - size, - }) + Some(Pixmap { data, size }) } /// Creates a new pixmap by taking ownership over an image buffer @@ -81,7 +79,11 @@ impl Pixmap { let mut decoder = png::Decoder::new(data); decoder.set_transformations(png::Transformations::normalize_to_color8()); let mut reader = decoder.read_info()?; - let mut img_data = vec![0; reader.output_buffer_size()]; + let mut img_data = Vec::new(); + img_data + .try_reserve_exact(reader.output_buffer_size()) + .map_err(|_| make_custom_png_error("failed to reserve output buffer"))?; + img_data.resize(reader.output_buffer_size(), 0); let info = reader.next_frame(&mut img_data)?; if info.bit_depth != png::BitDepth::Eight {