summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2021-06-07 10:51:17 -0700
committerGravatar GitHub2021-06-07 10:51:17 -0700
commitdf91c9f5e68c253d5e60d26e8d35e6bc423f0571 (patch)
treeb885455018581804972d171232f3c91ee009b2e8
parentMerge pull request #6414 from bunnei/fix-service-threads (diff)
parentdecoders: Break instead of continue (diff)
downloadyuzu-df91c9f5e68c253d5e60d26e8d35e6bc423f0571.tar.gz
yuzu-df91c9f5e68c253d5e60d26e8d35e6bc423f0571.tar.xz
yuzu-df91c9f5e68c253d5e60d26e8d35e6bc423f0571.zip
Merge pull request #6410 from lat9nq/avoid-oob
decoders: Avoid out-of-bounds access
-rw-r--r--src/video_core/textures/decoders.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/video_core/textures/decoders.cpp b/src/video_core/textures/decoders.cpp
index 3a463d5db..f1f523ad1 100644
--- a/src/video_core/textures/decoders.cpp
+++ b/src/video_core/textures/decoders.cpp
@@ -63,6 +63,14 @@ void Swizzle(std::span<u8> output, std::span<const u8> input, u32 bytes_per_pixe
63 const u32 unswizzled_offset = 63 const u32 unswizzled_offset =
64 slice * pitch * height + line * pitch + column * bytes_per_pixel; 64 slice * pitch * height + line * pitch + column * bytes_per_pixel;
65 65
66 if (const auto offset = (TO_LINEAR ? unswizzled_offset : swizzled_offset);
67 offset >= input.size()) {
68 // TODO(Rodrigo): This is an out of bounds access that should never happen. To
69 // avoid crashing the emulator, break.
70 ASSERT_MSG(false, "offset {} exceeds input size {}!", offset, input.size());
71 break;
72 }
73
66 u8* const dst = &output[TO_LINEAR ? swizzled_offset : unswizzled_offset]; 74 u8* const dst = &output[TO_LINEAR ? swizzled_offset : unswizzled_offset];
67 const u8* const src = &input[TO_LINEAR ? unswizzled_offset : swizzled_offset]; 75 const u8* const src = &input[TO_LINEAR ? unswizzled_offset : swizzled_offset];
68 std::memcpy(dst, src, bytes_per_pixel); 76 std::memcpy(dst, src, bytes_per_pixel);