From 69463033b1d8dc24b92026b9b91ce36bbb129420 Mon Sep 17 00:00:00 2001 From: gibbed Date: Thu, 22 Nov 2018 16:49:01 -0600 Subject: [PATCH] [Kernel] Don't trust buffer length in XamEnumerate when it matches items per enumerate. --- src/xenia/kernel/xam/xam_info.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/xenia/kernel/xam/xam_info.cc b/src/xenia/kernel/xam/xam_info.cc index 9996a17ee..38fdc04d0 100644 --- a/src/xenia/kernel/xam/xam_info.cc +++ b/src/xenia/kernel/xam/xam_info.cc @@ -198,10 +198,11 @@ dword_result_t XamEnumerate(dword_t handle, dword_t flags, lpvoid_t buffer, } } - size_t actual_buffer_length = e->item_size() * e->items_per_enumerate(); - if (actual_buffer_length != buffer_length) { + size_t actual_buffer_length = (uint32_t)buffer_length; + if (buffer_length == e->items_per_enumerate()) { + actual_buffer_length = e->item_size() * e->items_per_enumerate(); // Known culprits: - // Final Fight: Double Impact + // Final Fight: Double Impact (saves) XELOGW( "Broken usage of XamEnumerate! buffer length=%.X vs actual length=%.X " "(item size=%.X, items per enumerate=%u)",