summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Subv2018-02-17 13:54:59 -0500
committerGravatar Subv2018-02-17 14:00:44 -0500
commitd7583324259c0c99d9f4a545751dc109229c6f05 (patch)
tree4e5c31ad1e22a357b21a0b14441f48d9ea8b7144 /src
parentVi: Mark all fences as NO_FENCE in the DequeueBuffer response parcel. (diff)
downloadyuzu-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.cpp5
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