Skip to content

Commit cc3e5dd

Browse files
authored
fix: prevent uint32_t overflow in avifSetTileConfiguration tile area
When computing the tile count, width * height was performed as a uint32_t multiplication. For images with dimensions whose product exceeds UINT32_MAX (e.g. 100000x50000), this silently wraps around, producing an incorrect tile count and potentially corrupt tile layout. Fix by widening to uint64_t before multiplying. Fixes: integer overflow in avifSetTileConfiguration (src/write.c) Co-authored-by: uwezkhan06 <uwezkhan055@gmail.com>
1 parent d236952 commit cc3e5dd

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

src/write.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,10 @@ void avifSetTileConfiguration(int threads, uint32_t width, uint32_t height, int
9898
// number of threads would result in a compression penalty without much benefit.
9999
const uint32_t kMinTileArea = 512 * 512;
100100
const uint32_t kMaxTiles = 32;
101-
uint32_t imageArea = width * height;
102-
uint32_t tiles = (imageArea + kMinTileArea - 1) / kMinTileArea;
101+
// AV1 requires width <= 65536 and height <= 65536, so their product fits
102+
// in uint64_t and the resulting tile count fits in uint32_t.
103+
const uint64_t imageArea = (uint64_t)width * height;
104+
uint32_t tiles = (uint32_t)((imageArea + kMinTileArea - 1) / kMinTileArea);
103105
if (tiles > kMaxTiles) {
104106
tiles = kMaxTiles;
105107
}

0 commit comments

Comments
 (0)