diff --git a/src/common/Patch.cpp b/src/common/Patch.cpp index d908e89b..07daabfb 100644 --- a/src/common/Patch.cpp +++ b/src/common/Patch.cpp @@ -232,16 +232,25 @@ static bool patchApplyUPS(const char *patchname, u8 **rom, int *size) s64 dstSize = readVarPtr(f); if (crc == srcCRC) { - dataSize = srcSize; - } else if (crc == dstCRC) { + if (srcSize != *size) { + fclose(f); + return false; + } dataSize = dstSize; + } else if (crc == dstCRC) { + if (dstSize != *size) { + fclose(f); + return false; + } + dataSize = srcSize; } else { fclose(f); return false; } - if (dataSize != *size) { - fclose(f); - return false; + if (dataSize > *size) { + *rom = (u8*)realloc(*rom, dataSize); + memset(*rom + *size, 0, dataSize - *size); + *size = dataSize; } s64 relative = 0;