TileAttributes doc comments, padding buffer limit check
This commit is contained in:
1 parent
fddc048849
commit
65a1c553af
1 file changed
+18
-7
+18
-7
@@ -229,13 +229,19 @@ struct TileAttributes {
|
|||||||
tile_length: usize,
|
tile_length: usize,
|
||||||
tiles_down: usize,
|
tiles_down: usize,
|
||||||
tiles_across: usize,
|
tiles_across: usize,
|
||||||
padding_right: usize, // Length of padding for rightmost tiles in pixels
|
/// Length of padding for rightmost tiles in pixels
|
||||||
padding_down: usize, // length of padding for bottommost tile in pixels
|
padding_right: usize,
|
||||||
padding_buffer: Vec<u8>, // A simple buffer right paddding is read into
|
/// length of padding for bottommost tile in pixels
|
||||||
|
padding_down: usize,
|
||||||
|
/// A simple buffer right paddding is read into
|
||||||
|
padding_buffer: Vec<u8>,
|
||||||
tile_samples: usize,
|
tile_samples: usize,
|
||||||
line_samples: usize, // Sample count of one row of the image
|
/// Sample count of one row of the image
|
||||||
row_samples: usize, // Sample count of one row of one tile
|
line_samples: usize,
|
||||||
tile_strip_samples: usize, // Sample count of one row of tiles
|
/// Sample count of one row of one tile
|
||||||
|
row_samples: usize,
|
||||||
|
/// Sample count of one row of tiles
|
||||||
|
tile_strip_samples: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
@@ -1410,6 +1416,11 @@ impl<R: Read + Seek> Decoder<R> {
|
|||||||
let tile_strip_sample_count = (tile_sample_count * tiles_across)
|
let tile_strip_sample_count = (tile_sample_count * tiles_across)
|
||||||
- (padding_right * tile_length * samples_per_pixel);
|
- (padding_right * tile_length * samples_per_pixel);
|
||||||
|
|
||||||
|
let padding_buffer_size = padding_right * samples_per_pixel * buffer_byte_len;
|
||||||
|
if padding_buffer_size > self.limits.intermediate_buffer_size {
|
||||||
|
return Err(TiffError::LimitsExceeded);
|
||||||
|
}
|
||||||
|
|
||||||
self.tile_attributes = Some(TileAttributes {
|
self.tile_attributes = Some(TileAttributes {
|
||||||
tile_offsets: self.get_tag_u64_vec(Tag::TileOffsets)?,
|
tile_offsets: self.get_tag_u64_vec(Tag::TileOffsets)?,
|
||||||
tile_bytes: self.get_tag_u64_vec(Tag::TileByteCounts)?,
|
tile_bytes: self.get_tag_u64_vec(Tag::TileByteCounts)?,
|
||||||
@@ -1420,7 +1431,7 @@ impl<R: Read + Seek> Decoder<R> {
|
|||||||
tile_samples: tile_sample_count,
|
tile_samples: tile_sample_count,
|
||||||
padding_right,
|
padding_right,
|
||||||
padding_down: (tiles_down * tile_length) - usize::try_from(self.height)?,
|
padding_down: (tiles_down * tile_length) - usize::try_from(self.height)?,
|
||||||
padding_buffer: vec![0; padding_right * samples_per_pixel * buffer_byte_len],
|
padding_buffer: vec![0; padding_buffer_size],
|
||||||
line_samples: usize::try_from(self.width)? * samples_per_pixel,
|
line_samples: usize::try_from(self.width)? * samples_per_pixel,
|
||||||
row_samples: (tile_width * samples_per_pixel),
|
row_samples: (tile_width * samples_per_pixel),
|
||||||
tile_strip_samples: tile_strip_sample_count,
|
tile_strip_samples: tile_strip_sample_count,
|
||||||
|
|||||||
Reference in new issue
Block a user