mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-02-17 04:39:34 +00:00
Add functions to validate memory ranges.
This commit is contained in:
parent
ca14497111
commit
391ca8bed3
@ -275,18 +275,42 @@ inline void MemcpyUnchecked(const u32 to_address, const u32 from_address, const
|
||||
inline bool IsValidAddress(const u32 address) {
|
||||
if ((address & 0x3E000000) == 0x08000000) {
|
||||
return true;
|
||||
} else if ((address & 0x3F800000) == 0x04000000) {
|
||||
return true;
|
||||
} else if ((address & 0xBFFF0000) == 0x00010000) {
|
||||
return true;
|
||||
} else if ((address & 0x3F000000) >= 0x08000000 && (address & 0x3F000000) < 0x08000000 + g_MemorySize) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
inline u32 ValidSize(const u32 address, const u32 requested_size) {
|
||||
u32 max_size;
|
||||
if ((address & 0x3E000000) == 0x08000000) {
|
||||
max_size = 0x08000000 + g_MemorySize - address;
|
||||
}
|
||||
else if ((address & 0x3F800000) == 0x04000000) {
|
||||
return true;
|
||||
max_size = 0x04800000 - address;
|
||||
}
|
||||
else if ((address & 0xBFFF0000) == 0x00010000) {
|
||||
return true;
|
||||
max_size = 0x00014000 - address;
|
||||
}
|
||||
else if ((address & 0x3F000000) >= 0x08000000 && (address & 0x3F000000) < 0x08000000 + g_MemorySize) {
|
||||
return true;
|
||||
max_size = 0x08000000 + g_MemorySize - address;
|
||||
} else {
|
||||
max_size = 0;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
if (requested_size > max_size) {
|
||||
return max_size;
|
||||
}
|
||||
return requested_size;
|
||||
}
|
||||
|
||||
inline bool IsValidRange(const u32 address, const u32 size) {
|
||||
return IsValidAddress(address) && ValidSize(address, size) == size;
|
||||
}
|
||||
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user