Clamp segment count in PSPModule::GetLongInfo

nm.nsegment is attacker-controlled but segmentaddr/segmentsize are fixed
4-entry arrays; the debug info loop read past them. Clamp to 4 like the
other consumers.
This commit is contained in:
Henrik Rydgård
2026-08-01 13:16:21 +02:00
parent 942a76cfaa
commit 77ebdf2e80
+3 -1
View File
@@ -358,7 +358,9 @@ void PSPModule::GetLongInfo(char *ptr, int bufSize) const {
StringWriter w(ptr, bufSize);
w.F("%s: Version %d.%d. %d segments", nm.name, nm.version[1], nm.version[0], nm.nsegment).endl();
w.F("Memory block: %08x (%08x/%d bytes)", memoryBlockAddr, memoryBlockSize, memoryBlockSize).endl();
for (int i = 0; i < (int)nm.nsegment; i++) {
// nm.nsegment is attacker-controlled (up to u32 max) but segmentaddr/
// segmentsize are fixed 4-entry arrays; clamp like the other consumers.
for (int i = 0; i < (int)nm.nsegment && i < 4; i++) {
w.F(" %08x (%08x bytes)\n", nm.segmentaddr[i], nm.segmentsize[i]);
}
w.F("Text: %08x (%08x bytes)\n", nm.text_addr, nm.text_size);