- adjusting XAMEnumerate buffer size to fix Angry Birds and Resonance of Fate - thanks Gliniak

This commit is contained in:
Cancerous 2019-12-05 09:33:30 -05:00 committed by illusion
parent 6587672b19
commit 144e2eb51c
1 changed files with 3 additions and 14 deletions

View File

@ -353,20 +353,9 @@ dword_result_t XamEnumerate(dword_t handle, dword_t flags, lpvoid_t buffer,
}
}
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 (saves)
XELOGW(
"Broken usage of XamEnumerate! buffer length={:X} vs actual "
"length={:X} "
"(item size={:X}, items per enumerate={})",
(uint32_t)buffer_length, actual_buffer_length, e->item_size(),
e->items_per_enumerate());
}
//buffer.Zero(actual_buffer_length);
// Don't trust buffer_length. It might be invalid (Based on "Resonance of fate")
// also fixes "Angry Birds" - Thanks Gliniak
size_t actual_buffer_length = e->item_count() * e->item_size();
X_RESULT result;
uint32_t item_count = 0;