From f2510e4dc8d2e1297eeb6dea1b60da6e0826a4d1 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Mon, 9 May 2022 15:16:07 -0400 Subject: [PATCH] GP-0 corrected NaP pointer operand rendering --- .../program/model/data/PointerDataType.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java index 65122cf7d5..aafe82f788 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java @@ -402,9 +402,8 @@ public class PointerDataType extends BuiltIn implements Pointer { signedOffset = true; } - Long offset = getStoredOffset(buf, size, signedOffset); + Long offset = getStoredOffset(buf, size, signedOffset, errorHandler); if (offset == null) { - errorHandler.accept("Insufficient data"); return null; } @@ -541,9 +540,14 @@ public class PointerDataType extends BuiltIn implements Pointer { * @param signed true if signed offset or false for unsigned * @return stored offset value or null if unusable buf or data */ - private static Long getStoredOffset(MemBuffer buf, int size, boolean signed) { + private static Long getStoredOffset(MemBuffer buf, int size, boolean signed, + Consumer errorHandler) { byte[] bytes = new byte[size]; - if (buf.getBytes(bytes, 0) != size) { + int cnt = buf.getBytes(bytes, 0); + if (cnt != size) { + if (cnt != 0 && errorHandler != null) { + errorHandler.accept("Insufficient data"); + } return null; } DataConverter converter = DataConverter.getInstance(buf.isBigEndian()); @@ -569,10 +573,9 @@ public class PointerDataType extends BuiltIn implements Pointer { return null; } - Long offset = getStoredOffset(buf, size, false); + Long offset = getStoredOffset(buf, size, false, null); if (offset == null) { - // Insufficient bytes - return null; + return null; // Insufficient bytes } if (targetSpace instanceof SegmentedAddressSpace) {