decoders: Avoid out-of-bounds access
This is not a real fix, so assert here and continue before crashing.
This commit is contained in:
parent
1d1f616063
commit
1feefabeba
|
@ -63,6 +63,14 @@ void Swizzle(std::span<u8> output, std::span<const u8> input, u32 bytes_per_pixe
|
||||||
const u32 unswizzled_offset =
|
const u32 unswizzled_offset =
|
||||||
slice * pitch * height + line * pitch + column * bytes_per_pixel;
|
slice * pitch * height + line * pitch + column * bytes_per_pixel;
|
||||||
|
|
||||||
|
if (const auto offset = (TO_LINEAR ? unswizzled_offset : swizzled_offset);
|
||||||
|
offset >= input.size()) {
|
||||||
|
// TODO(Rodrigo): This is an out of bounds access that should never happen. To
|
||||||
|
// avoid crashing the emulator, continue.
|
||||||
|
ASSERT_MSG(false, "offset {} exceeds input size {}!", offset, input.size());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
u8* const dst = &output[TO_LINEAR ? swizzled_offset : unswizzled_offset];
|
u8* const dst = &output[TO_LINEAR ? swizzled_offset : unswizzled_offset];
|
||||||
const u8* const src = &input[TO_LINEAR ? unswizzled_offset : swizzled_offset];
|
const u8* const src = &input[TO_LINEAR ? unswizzled_offset : swizzled_offset];
|
||||||
std::memcpy(dst, src, bytes_per_pixel);
|
std::memcpy(dst, src, bytes_per_pixel);
|
||||||
|
|
Reference in New Issue