diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index ba0eac4c2..0d01a7047 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp | |||
| @@ -282,18 +282,18 @@ ResultCode HLERequestContext::WriteToOutgoingCommandBuffer(Thread& thread) { | |||
| 282 | } | 282 | } |
| 283 | 283 | ||
| 284 | std::vector<u8> HLERequestContext::ReadBuffer(std::size_t buffer_index) const { | 284 | std::vector<u8> HLERequestContext::ReadBuffer(std::size_t buffer_index) const { |
| 285 | std::vector<u8> buffer; | 285 | std::vector<u8> buffer{}; |
| 286 | const bool is_buffer_a{BufferDescriptorA().size() > buffer_index && | 286 | const bool is_buffer_a{BufferDescriptorA().size() > buffer_index && |
| 287 | BufferDescriptorA()[buffer_index].Size()}; | 287 | BufferDescriptorA()[buffer_index].Size()}; |
| 288 | 288 | ||
| 289 | if (is_buffer_a) { | 289 | if (is_buffer_a) { |
| 290 | ASSERT_MSG(BufferDescriptorA().size() > buffer_index, | 290 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorA().size() > buffer_index, { return buffer; }, |
| 291 | "BufferDescriptorA invalid buffer_index {}", buffer_index); | 291 | "BufferDescriptorA invalid buffer_index {}", buffer_index); |
| 292 | buffer.resize(BufferDescriptorA()[buffer_index].Size()); | 292 | buffer.resize(BufferDescriptorA()[buffer_index].Size()); |
| 293 | memory.ReadBlock(BufferDescriptorA()[buffer_index].Address(), buffer.data(), buffer.size()); | 293 | memory.ReadBlock(BufferDescriptorA()[buffer_index].Address(), buffer.data(), buffer.size()); |
| 294 | } else { | 294 | } else { |
| 295 | ASSERT_MSG(BufferDescriptorX().size() > buffer_index, | 295 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorX().size() > buffer_index, { return buffer; }, |
| 296 | "BufferDescriptorX invalid buffer_index {}", buffer_index); | 296 | "BufferDescriptorX invalid buffer_index {}", buffer_index); |
| 297 | buffer.resize(BufferDescriptorX()[buffer_index].Size()); | 297 | buffer.resize(BufferDescriptorX()[buffer_index].Size()); |
| 298 | memory.ReadBlock(BufferDescriptorX()[buffer_index].Address(), buffer.data(), buffer.size()); | 298 | memory.ReadBlock(BufferDescriptorX()[buffer_index].Address(), buffer.data(), buffer.size()); |
| 299 | } | 299 | } |
| @@ -318,16 +318,16 @@ std::size_t HLERequestContext::WriteBuffer(const void* buffer, std::size_t size, | |||
| 318 | } | 318 | } |
| 319 | 319 | ||
| 320 | if (is_buffer_b) { | 320 | if (is_buffer_b) { |
| 321 | ASSERT_MSG(BufferDescriptorB().size() > buffer_index, | 321 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorB().size() > buffer_index && |
| 322 | "BufferDescriptorB invalid buffer_index {}", buffer_index); | 322 | BufferDescriptorB()[buffer_index].Size() >= size, |
| 323 | ASSERT_MSG(BufferDescriptorB()[buffer_index].Size() >= size, | 323 | { return 0; }, "BufferDescriptorB is invalid, index={}, size={}", |
| 324 | "BufferDescriptorB buffer_index {} is not large enough", buffer_index); | 324 | buffer_index, size); |
| 325 | memory.WriteBlock(BufferDescriptorB()[buffer_index].Address(), buffer, size); | 325 | memory.WriteBlock(BufferDescriptorB()[buffer_index].Address(), buffer, size); |
| 326 | } else { | 326 | } else { |
| 327 | ASSERT_MSG(BufferDescriptorC().size() > buffer_index, | 327 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorC().size() > buffer_index && |
| 328 | "BufferDescriptorC invalid buffer_index {}", buffer_index); | 328 | BufferDescriptorC()[buffer_index].Size() >= size, |
| 329 | ASSERT_MSG(BufferDescriptorC()[buffer_index].Size() >= size, | 329 | { return 0; }, "BufferDescriptorC is invalid, index={}, size={}", |
| 330 | "BufferDescriptorC buffer_index {} is not large enough", buffer_index); | 330 | buffer_index, size); |
| 331 | memory.WriteBlock(BufferDescriptorC()[buffer_index].Address(), buffer, size); | 331 | memory.WriteBlock(BufferDescriptorC()[buffer_index].Address(), buffer, size); |
| 332 | } | 332 | } |
| 333 | 333 | ||
| @@ -338,16 +338,12 @@ std::size_t HLERequestContext::GetReadBufferSize(std::size_t buffer_index) const | |||
| 338 | const bool is_buffer_a{BufferDescriptorA().size() > buffer_index && | 338 | const bool is_buffer_a{BufferDescriptorA().size() > buffer_index && |
| 339 | BufferDescriptorA()[buffer_index].Size()}; | 339 | BufferDescriptorA()[buffer_index].Size()}; |
| 340 | if (is_buffer_a) { | 340 | if (is_buffer_a) { |
| 341 | ASSERT_MSG(BufferDescriptorA().size() > buffer_index, | 341 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorA().size() > buffer_index, { return 0; }, |
| 342 | "BufferDescriptorA invalid buffer_index {}", buffer_index); | 342 | "BufferDescriptorA invalid buffer_index {}", buffer_index); |
| 343 | ASSERT_MSG(BufferDescriptorA()[buffer_index].Size() > 0, | ||
| 344 | "BufferDescriptorA buffer_index {} is empty", buffer_index); | ||
| 345 | return BufferDescriptorA()[buffer_index].Size(); | 343 | return BufferDescriptorA()[buffer_index].Size(); |
| 346 | } else { | 344 | } else { |
| 347 | ASSERT_MSG(BufferDescriptorX().size() > buffer_index, | 345 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorX().size() > buffer_index, { return 0; }, |
| 348 | "BufferDescriptorX invalid buffer_index {}", buffer_index); | 346 | "BufferDescriptorX invalid buffer_index {}", buffer_index); |
| 349 | ASSERT_MSG(BufferDescriptorX()[buffer_index].Size() > 0, | ||
| 350 | "BufferDescriptorX buffer_index {} is empty", buffer_index); | ||
| 351 | return BufferDescriptorX()[buffer_index].Size(); | 347 | return BufferDescriptorX()[buffer_index].Size(); |
| 352 | } | 348 | } |
| 353 | } | 349 | } |
| @@ -356,14 +352,15 @@ std::size_t HLERequestContext::GetWriteBufferSize(std::size_t buffer_index) cons | |||
| 356 | const bool is_buffer_b{BufferDescriptorB().size() > buffer_index && | 352 | const bool is_buffer_b{BufferDescriptorB().size() > buffer_index && |
| 357 | BufferDescriptorB()[buffer_index].Size()}; | 353 | BufferDescriptorB()[buffer_index].Size()}; |
| 358 | if (is_buffer_b) { | 354 | if (is_buffer_b) { |
| 359 | ASSERT_MSG(BufferDescriptorB().size() > buffer_index, | 355 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorB().size() > buffer_index, { return 0; }, |
| 360 | "BufferDescriptorB invalid buffer_index {}", buffer_index); | 356 | "BufferDescriptorB invalid buffer_index {}", buffer_index); |
| 361 | return BufferDescriptorB()[buffer_index].Size(); | 357 | return BufferDescriptorB()[buffer_index].Size(); |
| 362 | } else { | 358 | } else { |
| 363 | ASSERT_MSG(BufferDescriptorC().size() > buffer_index, | 359 | ASSERT_OR_EXECUTE_MSG(BufferDescriptorC().size() > buffer_index, { return 0; }, |
| 364 | "BufferDescriptorC invalid buffer_index {}", buffer_index); | 360 | "BufferDescriptorC invalid buffer_index {}", buffer_index); |
| 365 | return BufferDescriptorC()[buffer_index].Size(); | 361 | return BufferDescriptorC()[buffer_index].Size(); |
| 366 | } | 362 | } |
| 363 | return 0; | ||
| 367 | } | 364 | } |
| 368 | 365 | ||
| 369 | std::string HLERequestContext::Description() const { | 366 | std::string HLERequestContext::Description() const { |