diff options
| author | 2021-06-04 03:35:13 -0400 | |
|---|---|---|
| committer | 2021-06-04 05:03:54 -0400 | |
| commit | 1feefabeba24fa249c8fc3d320a9becdd4f9bced (patch) | |
| tree | 79b1149a701a65490e3e040610762e1db20dfedb /src/video_core/textures/decoders.cpp | |
| parent | Merge pull request #6389 from german77/Analog_button_fix (diff) | |
| download | yuzu-1feefabeba24fa249c8fc3d320a9becdd4f9bced.tar.gz yuzu-1feefabeba24fa249c8fc3d320a9becdd4f9bced.tar.xz yuzu-1feefabeba24fa249c8fc3d320a9becdd4f9bced.zip | |
decoders: Avoid out-of-bounds access
This is not a real fix, so assert here and continue before crashing.
Diffstat (limited to 'src/video_core/textures/decoders.cpp')
| -rw-r--r-- | src/video_core/textures/decoders.cpp | 8 |
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..1bccc09d9 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, continue. | ||
| 70 | ASSERT_MSG(false, "offset {} exceeds input size {}!", offset, input.size()); | ||
| 71 | continue; | ||
| 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); |