Просмотр исходного кода

hle_ipc: Add GetReadBufferSize and check write buffer size.

bunnei 8 лет назад
Родитель
Сommit
6fd19f05f1
2 измененных файлов с 10 добавлено и 0 удалено
  1. 7 0
      src/core/hle/kernel/hle_ipc.cpp
  2. 3 0
      src/core/hle/kernel/hle_ipc.h

+ 7 - 0
src/core/hle/kernel/hle_ipc.cpp

@@ -229,6 +229,8 @@ std::vector<u8> HLERequestContext::ReadBuffer() const {
 size_t HLERequestContext::WriteBuffer(const void* buffer, const size_t size) const {
 size_t HLERequestContext::WriteBuffer(const void* buffer, const size_t size) const {
     const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()};
     const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()};
 
 
+    ASSERT_MSG(size <= GetWriteBufferSize(), "Size %d is too big", size);
+
     if (is_buffer_b) {
     if (is_buffer_b) {
         Memory::WriteBlock(BufferDescriptorB()[0].Address(), buffer, size);
         Memory::WriteBlock(BufferDescriptorB()[0].Address(), buffer, size);
     } else {
     } else {
@@ -242,6 +244,11 @@ size_t HLERequestContext::WriteBuffer(const std::vector<u8>& buffer) const {
     return WriteBuffer(buffer.data(), buffer.size());
     return WriteBuffer(buffer.data(), buffer.size());
 }
 }
 
 
+size_t HLERequestContext::GetReadBufferSize() const {
+    const bool is_buffer_a{BufferDescriptorA().size() && BufferDescriptorA()[0].Size()};
+    return is_buffer_a ? BufferDescriptorA()[0].Size() : BufferDescriptorX()[0].Size();
+}
+
 size_t HLERequestContext::GetWriteBufferSize() const {
 size_t HLERequestContext::GetWriteBufferSize() const {
     const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()};
     const bool is_buffer_b{BufferDescriptorB().size() && BufferDescriptorB()[0].Size()};
     return is_buffer_b ? BufferDescriptorB()[0].Size() : BufferDescriptorC()[0].Size();
     return is_buffer_b ? BufferDescriptorB()[0].Size() : BufferDescriptorC()[0].Size();

+ 3 - 0
src/core/hle/kernel/hle_ipc.h

@@ -152,6 +152,9 @@ public:
     /// Helper function to write a buffer using the appropriate buffer descriptor
     /// Helper function to write a buffer using the appropriate buffer descriptor
     size_t WriteBuffer(const std::vector<u8>& buffer) const;
     size_t WriteBuffer(const std::vector<u8>& buffer) const;
 
 
+    /// Helper function to get the size of the input buffer
+    size_t GetReadBufferSize() const;
+
     /// Helper function to get the size of the output buffer
     /// Helper function to get the size of the output buffer
     size_t GetWriteBufferSize() const;
     size_t GetWriteBufferSize() const;