GP-7026 Improved PointerDataType.getAddressValue error checking

This commit is contained in:
ghidra1
2026-07-02 09:14:29 -04:00
parent 5291c4822f
commit 0dd2689641

View File

@@ -415,6 +415,7 @@ public class PointerDataType extends BuiltIn implements Pointer {
AddressSpace targetSpace = null;
Memory mem = buf.getMemory();
Program program = mem != null ? mem.getProgram() : null;
boolean signedOffset = false;
PointerType pointerType = PointerTypeSettingsDefinition.DEF.getType(settings);
@@ -463,11 +464,13 @@ public class PointerDataType extends BuiltIn implements Pointer {
// A 0 relative offset is considered invalid (NaP)
return null; // NaP without error
}
if (mem == null) {
errorHandler.accept("Memory not specified");
if (program == null) {
errorHandler
.accept("Unable to compute IBO address - Program memory not specified");
return null;
}
// must ignore AddressSpaceSettingsDefinition
Address imageBase = mem.getProgram().getImageBase();
Address imageBase = program.getImageBase();
targetSpace = imageBase.getAddressSpace();
return imageBase.addWrap(addrOffset * targetSpace.getAddressableUnitSize());
}
@@ -483,10 +486,10 @@ public class PointerDataType extends BuiltIn implements Pointer {
}
else if (pointerType == PointerType.FILE_OFFSET) {
if (mem == null) {
errorHandler.accept("Memory not specified");
errorHandler.accept("File offset lookup failed - Memory not specified");
}
else if (mem.getAllFileBytes().size() == 0) {
errorHandler.accept("No File bytes used");
errorHandler.accept("File offset lookup failed - No File bytes used");
}
else {
List<Address> addressList = mem.locateAddressesForFileOffset(addrOffset);
@@ -510,19 +513,21 @@ public class PointerDataType extends BuiltIn implements Pointer {
}
if (spaceName != null) {
if (mem == null) {
errorHandler.accept("Memory not specified");
// Address space was specified by a setting
if (program == null) {
errorHandler
.accept("Address space lookup failed - Program memory not specified");
return null;
}
Program program = mem.getProgram();
targetSpace = program.getAddressFactory().getAddressSpace(spaceName);
if (targetSpace == null) {
errorHandler.accept(
"Address space not defined: " + spaceName + ":" + formatOffset(addrOffset));
return null;
}
if (targetSpace.isNonLoadedMemorySpace()) {
errorHandler.accept("Address space is non-loaded: " + spaceName + ":" +
if (!targetSpace.isLoadedMemorySpace()) {
errorHandler
.accept("Address space is not loaded memory space: " + spaceName + ":" +
formatOffset(addrOffset));
return null;
}
@@ -533,10 +538,10 @@ public class PointerDataType extends BuiltIn implements Pointer {
if (targetSpace.isRegisterSpace()) {
Language language = buf.getLanguage();
if (language == null) {
errorHandler.accept("Language not specified");
errorHandler.accept("Unable to identify default Address space");
return null;
}
targetSpace = language.getDefaultDataSpace();
targetSpace = language.getDefaultSpace();
}
if (targetSpace instanceof SegmentedAddressSpace) {