Explorar o código

maxwell_dma: Check for valid source in destination before copy.

- Avoid a crash in Octopath Traveler.
bunnei %!s(int64=7) %!d(string=hai) anos
pai
achega
19330f45d3
Modificáronse 1 ficheiros con 10 adicións e 0 borrados
  1. 10 0
      src/video_core/engines/maxwell_dma.cpp

+ 10 - 0
src/video_core/engines/maxwell_dma.cpp

@@ -88,6 +88,16 @@ void MaxwellDMA::HandleCopy() {
     auto source_ptr{memory_manager.GetPointer(source)};
     auto source_ptr{memory_manager.GetPointer(source)};
     auto dst_ptr{memory_manager.GetPointer(dest)};
     auto dst_ptr{memory_manager.GetPointer(dest)};
 
 
+    if (!source_ptr) {
+        LOG_ERROR(HW_GPU, "source_ptr is invalid");
+        return;
+    }
+
+    if (!dst_ptr) {
+        LOG_ERROR(HW_GPU, "dst_ptr is invalid");
+        return;
+    }
+
     const auto FlushAndInvalidate = [&](u32 src_size, u64 dst_size) {
     const auto FlushAndInvalidate = [&](u32 src_size, u64 dst_size) {
         // TODO(Subv): For now, manually flush the regions until we implement GPU-accelerated
         // TODO(Subv): For now, manually flush the regions until we implement GPU-accelerated
         // copying.
         // copying.