BTIGhidra icon indicating copy to clipboard operation
BTIGhidra copied to clipboard

Type Interference - Cannot invoke "ghidra.program.model.data.DataType.getLength()" because "dt" is null

Open chicken2006 opened this issue 1 year ago • 1 comments

(These messages are also written to the application log file)

Cannot invoke "ghidra.program.model.data.DataType.getLength()" because "dt" is null
java.lang.NullPointerException: Cannot invoke "ghidra.program.model.data.DataType.getLength()" because "dt" is null
	at binary_type_inference.TypeLattice.FieldMember(TypeLattice.java:165)
	at binary_type_inference.TypeLattice.get_ptr_dtv_for_type(TypeLattice.java:176)
	at binary_type_inference.TypeLattice.representation_for_pointer(TypeLattice.java:190)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:261)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_pointer(TypeLattice.java:195)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:261)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_datatype_recursive(TypeLattice.java:294)
	at binary_type_inference.TypeLattice.representation_for_structure(TypeLattice.java:228)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:264)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_pointer(TypeLattice.java:195)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:261)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_datatype_recursive(TypeLattice.java:294)
	at binary_type_inference.TypeLattice.representation_for_structure(TypeLattice.java:228)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:264)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_datatype_recursive(TypeLattice.java:294)
	at binary_type_inference.TypeLattice.representation_for_structure(TypeLattice.java:228)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:264)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_pointer(TypeLattice.java:195)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:261)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_datatype_recursive(TypeLattice.java:294)
	at binary_type_inference.TypeLattice.representation_for_structure(TypeLattice.java:228)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:264)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_pointer(TypeLattice.java:195)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:261)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_datatype_recursive(TypeLattice.java:294)
	at binary_type_inference.TypeLattice.representation_for_structure(TypeLattice.java:228)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:264)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.representation_for_pointer(TypeLattice.java:195)
	at binary_type_inference.TypeLattice.representation_for_datatype_no_memo(TypeLattice.java:261)
	at binary_type_inference.TypeLattice.representation_for_datatype(TypeLattice.java:282)
	at binary_type_inference.TypeLattice.constraintsForParam(TypeLattice.java:123)
	at binary_type_inference.TypeLattice.constraintsForSignature(TypeLattice.java:302)
	at binary_type_inference.TypeLattice.lambda$collectSignatureConstraints$0(TypeLattice.java:320)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1858)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:657)
	at binary_type_inference.TypeLattice.collectSignatureConstraints(TypeLattice.java:321)
	at binary_type_inference.TypeLattice.getOutputBuilder(TypeLattice.java:376)
	at binary_type_inference.BinaryTypeInference.produceArtifacts(BinaryTypeInference.java:287)
	at binary_type_inference.BinaryTypeInference.run(BinaryTypeInference.java:475)
	at binary_type_inference.TypeAnalyzer.added(TypeAnalyzer.java:213)
	at ghidra.app.plugin.core.analysis.OneShotAnalysisCommand.applyTo(OneShotAnalysisCommand.java:48)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager$AnalysisTaskWrapper.run(AutoAnalysisManager.java:686)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:786)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:665)
	at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:630)
	at ghidra.app.plugin.core.analysis.AnalysisBackgroundCommand.applyTo(AnalysisBackgroundCommand.java:58)
	at ghidra.framework.plugintool.mgr.BackgroundCommandTask.run(BackgroundCommandTask.java:103)
	at ghidra.framework.plugintool.mgr.ToolTaskManager.run(ToolTaskManager.java:334)
	at java.base/java.lang.Thread.run(Thread.java:1583)

System Information Platform: Gentoo Linux Ghidra 11.0.1 Java: openjdk-bin-21.0.2_p13 BTIGhidra version: 0.0.6

chicken2006 avatar Mar 15 '24 23:03 chicken2006

I'm also running into this issue.

The doc for Pointer.getDataType() explicitly states that it can return null, so this specific code needs to handle this somehow (and it's not an issue else where that that accidentally introduced the null value)

public interface Pointer extends DataType {
        [...]
	/**
	 * Returns the "pointed to" dataType
	 * @return referenced datatype (may be null)
	 */
	DataType getDataType();

https://github.com/NationalSecurityAgency/ghidra/blob/c014e6851fd6da1676949a42891d5f884e487e75/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/Pointer.java#L30-L34

fmagin avatar Apr 25 '24 10:04 fmagin