From f8f694ad4e55aaf58a99ddfc91937baf367658a8 Mon Sep 17 00:00:00 2001 From: dev747368 <48332326+dev747368@users.noreply.github.com> Date: Tue, 18 Jun 2019 11:01:18 -0400 Subject: [PATCH] GT-2939 closes #690: handle empty DWARF compilation units. Pulled-from: FergoFrog <45412+fergofrog@users.noreply.github.com> --- .../app/util/bin/format/dwarf4/DWARFCompilationUnit.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/DWARFCompilationUnit.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/DWARFCompilationUnit.java index 2ed1bfde12..0f15dba673 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/DWARFCompilationUnit.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf4/DWARFCompilationUnit.java @@ -148,6 +148,7 @@ public class DWARFCompilationUnit { else { format = DWARF_32; } + long endOffset = (debugInfoBR.getPointerIndex() + length); short version = debugInfoBR.readNextShort(); long abbreviationOffset = DWARFUtil.readOffsetByDWARFformat(debugInfoBR, format); @@ -158,6 +159,14 @@ public class DWARFCompilationUnit { throw new DWARFException( "Only DWARF version 2, 3, or 4 information is currently supported."); } + if (firstDIEOffset > endOffset) { + throw new IOException("Invalid length " + (endOffset - startOffset) + + " for DWARF Compilation Unit at 0x" + Long.toHexString(startOffset)); + } + else if (firstDIEOffset == endOffset) { + // silently skip this empty compunit + return null; + } debugAbbrBR.setPointerIndex(abbreviationOffset); Map abbrMap =