diff options
| author | 2018-02-17 13:54:59 -0500 | |
|---|---|---|
| committer | 2018-02-17 14:00:44 -0500 | |
| commit | d7583324259c0c99d9f4a545751dc109229c6f05 (patch) | |
| tree | 4e5c31ad1e22a357b21a0b14441f48d9ea8b7144 /src | |
| parent | Vi: Mark all fences as NO_FENCE in the DequeueBuffer response parcel. (diff) | |
| download | yuzu-d7583324259c0c99d9f4a545751dc109229c6f05.tar.gz yuzu-d7583324259c0c99d9f4a545751dc109229c6f05.tar.xz yuzu-d7583324259c0c99d9f4a545751dc109229c6f05.zip | |
Parcel: Ensure we don't read past the end of the parcels in Vi.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/vi/vi.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 1afd5a4fb..0aa621dfe 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
| @@ -39,6 +39,7 @@ public: | |||
| 39 | 39 | ||
| 40 | template <typename T> | 40 | template <typename T> |
| 41 | T Read() { | 41 | T Read() { |
| 42 | ASSERT(read_index + sizeof(T) <= buffer.size()); | ||
| 42 | T val; | 43 | T val; |
| 43 | std::memcpy(&val, buffer.data() + read_index, sizeof(T)); | 44 | std::memcpy(&val, buffer.data() + read_index, sizeof(T)); |
| 44 | read_index += sizeof(T); | 45 | read_index += sizeof(T); |
| @@ -48,6 +49,7 @@ public: | |||
| 48 | 49 | ||
| 49 | template <typename T> | 50 | template <typename T> |
| 50 | T ReadUnaligned() { | 51 | T ReadUnaligned() { |
| 52 | ASSERT(read_index + sizeof(T) <= buffer.size()); | ||
| 51 | T val; | 53 | T val; |
| 52 | std::memcpy(&val, buffer.data() + read_index, sizeof(T)); | 54 | std::memcpy(&val, buffer.data() + read_index, sizeof(T)); |
| 53 | read_index += sizeof(T); | 55 | read_index += sizeof(T); |
| @@ -55,6 +57,7 @@ public: | |||
| 55 | } | 57 | } |
| 56 | 58 | ||
| 57 | std::vector<u8> ReadBlock(size_t length) { | 59 | std::vector<u8> ReadBlock(size_t length) { |
| 60 | ASSERT(read_index + length <= buffer.size()); | ||
| 58 | const u8* const begin = buffer.data() + read_index; | 61 | const u8* const begin = buffer.data() + read_index; |
| 59 | const u8* const end = begin + length; | 62 | const u8* const end = begin + length; |
| 60 | std::vector<u8> data(begin, end); | 63 | std::vector<u8> data(begin, end); |
| @@ -97,6 +100,8 @@ public: | |||
| 97 | } | 100 | } |
| 98 | 101 | ||
| 99 | void Deserialize() { | 102 | void Deserialize() { |
| 103 | ASSERT(buffer.size() > sizeof(Header)); | ||
| 104 | |||
| 100 | Header header{}; | 105 | Header header{}; |
| 101 | std::memcpy(&header, buffer.data(), sizeof(Header)); | 106 | std::memcpy(&header, buffer.data(), sizeof(Header)); |
| 102 | 107 | ||