parent
70f8be5334
commit
c614cba966
@ -1,58 +0,0 @@
|
|||||||
From 1269c1210c88a5adfcc8104b5d41e6706d06607b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jonathan Behrens <fintelia@gmail.com>
|
|
||||||
Date: Sat, 13 Jan 2024 19:52:12 -0500
|
|
||||||
Subject: [PATCH] Fix reference tests on big endian (#2099)
|
|
||||||
|
|
||||||
---
|
|
||||||
tests/reference_images.rs | 28 +++++++++++++++++++++++++---
|
|
||||||
1 file changed, 25 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tests/reference_images.rs b/tests/reference_images.rs
|
|
||||||
index d07423f23f..015d6a6e09 100644
|
|
||||||
--- a/tests/reference_images.rs
|
|
||||||
+++ b/tests/reference_images.rs
|
|
||||||
@@ -1,4 +1,5 @@
|
|
||||||
//! Compares the decoding results with reference renderings.
|
|
||||||
+use std::convert::TryInto;
|
|
||||||
use std::fs;
|
|
||||||
use std::io;
|
|
||||||
use std::path::PathBuf;
|
|
||||||
@@ -270,14 +271,35 @@ fn check_references() {
|
|
||||||
|
|
||||||
let test_crc_actual = {
|
|
||||||
let mut hasher = Crc32::new();
|
|
||||||
- hasher.update(test_img.as_bytes());
|
|
||||||
+ match test_img {
|
|
||||||
+ DynamicImage::ImageLuma8(_)
|
|
||||||
+ | DynamicImage::ImageLumaA8(_)
|
|
||||||
+ | DynamicImage::ImageRgb8(_)
|
|
||||||
+ | DynamicImage::ImageRgba8(_) => hasher.update(test_img.as_bytes()),
|
|
||||||
+ DynamicImage::ImageLuma16(_)
|
|
||||||
+ | DynamicImage::ImageLumaA16(_)
|
|
||||||
+ | DynamicImage::ImageRgb16(_)
|
|
||||||
+ | DynamicImage::ImageRgba16(_) => {
|
|
||||||
+ for v in test_img.as_bytes().chunks(2) {
|
|
||||||
+ hasher.update(&u16::from_ne_bytes(v.try_into().unwrap()).to_le_bytes());
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ DynamicImage::ImageRgb32F(_) | DynamicImage::ImageRgba32F(_) => {
|
|
||||||
+ for v in test_img.as_bytes().chunks(4) {
|
|
||||||
+ hasher.update(&f32::from_ne_bytes(v.try_into().unwrap()).to_le_bytes());
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ _ => panic!("Unsupported image format"),
|
|
||||||
+ }
|
|
||||||
hasher.finalize()
|
|
||||||
};
|
|
||||||
|
|
||||||
if test_crc_actual != case.crc {
|
|
||||||
panic!(
|
|
||||||
- "The decoded image's hash does not match (expected = {:08x}, actual = {:08x}).",
|
|
||||||
- case.crc, test_crc_actual
|
|
||||||
+ "{}: The decoded image's hash does not match (expected = {:08x}, actual = {:08x}).",
|
|
||||||
+ img_path.display(),
|
|
||||||
+ case.crc,
|
|
||||||
+ test_crc_actual
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From 14d45771a9820dd14cb1533505098225624d7250 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jonathan Behrens <fintelia@gmail.com>
|
|
||||||
Date: Sat, 13 Jan 2024 20:33:24 -0500
|
|
||||||
Subject: [PATCH] Avoid overflow in gif::Decoder::buffer_size (#2103)
|
|
||||||
|
|
||||||
---
|
|
||||||
src/codecs/gif.rs | 11 ++++++++---
|
|
||||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/codecs/gif.rs b/src/codecs/gif.rs
|
|
||||||
index 6f3f87d09c..8b6f5ee26f 100644
|
|
||||||
--- a/src/codecs/gif.rs
|
|
||||||
+++ b/src/codecs/gif.rs
|
|
||||||
@@ -37,6 +37,8 @@ use gif::{DisposalMethod, Frame};
|
|
||||||
|
|
||||||
use crate::animation::{self, Ratio};
|
|
||||||
use crate::color::{ColorType, Rgba};
|
|
||||||
+use crate::error::LimitError;
|
|
||||||
+use crate::error::LimitErrorKind;
|
|
||||||
use crate::error::{
|
|
||||||
DecodingError, EncodingError, ImageError, ImageResult, ParameterError, ParameterErrorKind,
|
|
||||||
UnsupportedError, UnsupportedErrorKind,
|
|
||||||
@@ -177,12 +179,15 @@ impl<'a, R: 'a + Read> ImageDecoder<'a> for GifDecoder<R> {
|
|
||||||
} else {
|
|
||||||
// If the frame does not match the logical screen, read into an extra buffer
|
|
||||||
// and 'insert' the frame from left/top to logical screen width/height.
|
|
||||||
- let buffer_size = self.reader.buffer_size();
|
|
||||||
+ let buffer_size = (frame.width as usize)
|
|
||||||
+ .checked_mul(frame.height as usize)
|
|
||||||
+ .and_then(|s| s.checked_mul(4))
|
|
||||||
+ .ok_or(ImageError::Limits(LimitError::from_kind(
|
|
||||||
+ LimitErrorKind::InsufficientMemory,
|
|
||||||
+ )))?;
|
|
||||||
|
|
||||||
self.limits.reserve_usize(buffer_size)?;
|
|
||||||
-
|
|
||||||
let mut frame_buffer = vec![0; buffer_size];
|
|
||||||
-
|
|
||||||
self.limits.free_usize(buffer_size);
|
|
||||||
|
|
||||||
self.reader
|
|
@ -1 +1 @@
|
|||||||
SHA512 (image-0.24.8.crate) = 808c25e1b2308b25afa727cf510ee5b5398cc3948e647eea7cd4e651857d158462190a39c2e1d5279c8c7a5144efdcf1943e311504a404d801de76d05692a88e
|
SHA512 (image-0.24.9.crate) = 3f858efceeed54e21543eee065ca6008f40c568e1ece1016b38040eff5625c9fb6de77c7e950c08c9e82b9fcbd4c4ec2f8c4c1157ed5d232bc8e35b4850420d2
|
||||||
|
Loading…
Reference in new issue