diff options
| author | 2018-02-14 00:14:17 -0500 | |
|---|---|---|
| committer | 2018-02-14 00:14:17 -0500 | |
| commit | 6fd19f05f1eba884a20e79ee43fce1af388204d4 (patch) | |
| tree | bbda0c9e467045c4bef0fc576846339d43ebe26a /src/core | |
| parent | service: Remove remaining uses of BufferDescriptor*. (diff) | |
| download | yuzu-6fd19f05f1eba884a20e79ee43fce1af388204d4.tar.gz yuzu-6fd19f05f1eba884a20e79ee43fce1af388204d4.tar.xz yuzu-6fd19f05f1eba884a20e79ee43fce1af388204d4.zip | |
hle_ipc: Add GetReadBufferSize and check write buffer size.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 7 | ||||
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.h | 3 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 0a9986c18..d592f502d 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp | |||
| @@ -229,6 +229,8 @@ std::vector<u8> HLERequestContext::ReadBuffer() const { | |||
| 229 | size_t HLERequestContext::WriteBuffer(const void* buffer, const size_t size) const { | 229 | size_t HLERequestContext::WriteBuffer(const void* buffer, const size_t size) const { |
| 230 | const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()}; | 230 | const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()}; |
| 231 | 231 | ||
| 232 | ASSERT_MSG(size <= GetWriteBufferSize(), "Size %d is too big", size); | ||
| 233 | |||
| 232 | if (is_buffer_b) { | 234 | if (is_buffer_b) { |
| 233 | Memory::WriteBlock(BufferDescriptorB()[0].Address(), buffer, size); | 235 | Memory::WriteBlock(BufferDescriptorB()[0].Address(), buffer, size); |
| 234 | } else { | 236 | } else { |
| @@ -242,6 +244,11 @@ size_t HLERequestContext::WriteBuffer(const std::vector<u8>& buffer) const { | |||
| 242 | return WriteBuffer(buffer.data(), buffer.size()); | 244 | return WriteBuffer(buffer.data(), buffer.size()); |
| 243 | } | 245 | } |
| 244 | 246 | ||
| 247 | size_t HLERequestContext::GetReadBufferSize() const { | ||
| 248 | const bool is_buffer_a{BufferDescriptorA().size() && BufferDescriptorA()[0].Size()}; | ||
| 249 | return is_buffer_a ? BufferDescriptorA()[0].Size() : BufferDescriptorX()[0].Size(); | ||
| 250 | } | ||
| 251 | |||
| 245 | size_t HLERequestContext::GetWriteBufferSize() const { | 252 | size_t HLERequestContext::GetWriteBufferSize() const { |
| 246 | const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()}; | 253 | const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()}; |
| 247 | return is_buffer_b ? BufferDescriptorB()[0].Size() : BufferDescriptorC()[0].Size(); | 254 | return is_buffer_b ? BufferDescriptorB()[0].Size() : BufferDescriptorC()[0].Size(); |
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h index 0cc270909..5b1eae74a 100644 --- a/src/core/hle/kernel/hle_ipc.h +++ b/src/core/hle/kernel/hle_ipc.h | |||
| @@ -152,6 +152,9 @@ public: | |||
| 152 | /// Helper function to write a buffer using the appropriate buffer descriptor | 152 | /// Helper function to write a buffer using the appropriate buffer descriptor |
| 153 | size_t WriteBuffer(const std::vector<u8>& buffer) const; | 153 | size_t WriteBuffer(const std::vector<u8>& buffer) const; |
| 154 | 154 | ||
| 155 | /// Helper function to get the size of the input buffer | ||
| 156 | size_t GetReadBufferSize() const; | ||
| 157 | |||
| 155 | /// Helper function to get the size of the output buffer | 158 | /// Helper function to get the size of the output buffer |
| 156 | size_t GetWriteBufferSize() const; | 159 | size_t GetWriteBufferSize() const; |
| 157 | 160 | ||