From f19df903899efdd71cf5f890ad1ebd3f2fb02905 Mon Sep 17 00:00:00 2001 From: caheckman <48068198+caheckman@users.noreply.github.com> Date: Fri, 22 Jul 2022 12:55:33 -0400 Subject: [PATCH] GP-2262 - type id should be long --- Ghidra/Features/Decompiler/src/decompile/cpp/type.cc | 2 ++ .../src/main/java/ghidra/app/decompiler/ClangTypeToken.java | 4 ++-- .../java/ghidra/program/model/pcode/PcodeDataTypeManager.java | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc index bd024bc203..b8dbcd55bb 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/type.cc @@ -3192,6 +3192,8 @@ TypePointer *TypeFactory::getTypePointerNoDepth(int4 s,Datatype *pt,uint4 ws) TypeArray *TypeFactory::getTypeArray(int4 as,Datatype *ao) { + if (ao->hasStripped()) + ao = ao->getStripped(); TypeArray tmp(as,ao); return (TypeArray *) findAdd(tmp); } diff --git a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/ClangTypeToken.java b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/ClangTypeToken.java index 52ed43926a..4b05bdf408 100644 --- a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/ClangTypeToken.java +++ b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/ClangTypeToken.java @@ -52,14 +52,14 @@ public class ClangTypeToken extends ClangToken { @Override public void decode(Decoder decoder, PcodeFactory pfactory) throws PcodeXMLException { - int id = 0; + long id = 0; for (;;) { int attribId = decoder.getNextAttributeId(); if (attribId == 0) { break; } if (attribId == AttributeId.ATTRIB_ID.getId()) { - id = (int) decoder.readUnsignedInteger(); + id = decoder.readUnsignedInteger(); break; } } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java index ca50a3139a..f330c8f1dd 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java @@ -251,7 +251,7 @@ public class PcodeDataTypeManager { else { // We typically reach here if the decompiler invents a new type // probably an unknown with a non-standard size int size = (int) decoder.readSignedInteger(AttributeId.ATTRIB_SIZE); - decoder.closeElement(el); + decoder.closeElementSkipping(el); return Undefined.getUndefinedDataType(size).clone(progDataTypes); } if (restype == null) {