summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2018-02-17 13:54:59 -0500
committerSubv <subv2112@gmail.com>2018-02-17 14:00:44 -0500
commitd7583324259c0c99d9f4a545751dc109229c6f05 (patch)
tree4e5c31ad1e22a357b21a0b14441f48d9ea8b7144 /src
parent2662de6e52344e082bc5855ea0e3e791588862c6 (diff)
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:
template <typename T>
T Read() {
+ ASSERT(read_index + sizeof(T) <= buffer.size());
T val;
std::memcpy(&val, buffer.data() + read_index, sizeof(T));
read_index += sizeof(T);
@@ -48,6 +49,7 @@ public:
template <typename T>
T ReadUnaligned() {
+ ASSERT(read_index + sizeof(T) <= buffer.size());
T val;
std::memcpy(&val, buffer.data() + read_index, sizeof(T));
read_index += sizeof(T);
@@ -55,6 +57,7 @@ public:
}
std::vector<u8> ReadBlock(size_t length) {
+ ASSERT(read_index + length <= buffer.size());
const u8* const begin = buffer.data() + read_index;
const u8* const end = begin + length;
std::vector<u8> data(begin, end);
@@ -97,6 +100,8 @@ public:
}
void Deserialize() {
+ ASSERT(buffer.size() > sizeof(Header));
+
Header header{};
std::memcpy(&header, buffer.data(), sizeof(Header));