summaryrefslogtreecommitdiff
path: root/view/elf
diff options
context:
space:
mode:
authorJordan Wiens <github@psifertex.com>2026-02-19 18:15:51 -0500
committerJordan Wiens <github@psifertex.com>2026-02-19 18:15:51 -0500
commitbcc40473b3660005e83f51150bdc17ae177768dc (patch)
tree33b0efde30796fc527893913340faded4ec4d598 /view/elf
parent1530770981627436259078461823272722710609 (diff)
validation for zero sized symbol or string tables
Diffstat (limited to 'view/elf')
-rw-r--r--view/elf/elfview.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/view/elf/elfview.cpp b/view/elf/elfview.cpp
index 1279dead..a3d60456 100644
--- a/view/elf/elfview.cpp
+++ b/view/elf/elfview.cpp
@@ -1094,10 +1094,14 @@ bool ElfView::Init()
DefineAutoSymbol(new Symbol(DataSymbol, "__elf_hash_table", m_hashHeader, NoBinding));
// Gratuitously create sections for the symbol and string tables if none exist
- if (!GetSectionsAt(m_auxSymbolTable.offset).size())
+ if (m_auxSymbolTable.size && !GetSectionsAt(m_auxSymbolTable.offset).size())
AddAutoSection(".dynamic_symtab", m_auxSymbolTable.offset, m_auxSymbolTable.size, ReadOnlyDataSectionSemantics);
- if (!GetSectionsAt(m_dynamicStringTable.offset).size())
+ else if (!m_auxSymbolTable.size)
+ m_logger->LogWarn("Skipping zero-length .dynamic_symtab section at 0x%" PRIx64, m_auxSymbolTable.offset);
+ if (m_dynamicStringTable.size && !GetSectionsAt(m_dynamicStringTable.offset).size())
AddAutoSection(".dynamic_strtab", m_dynamicStringTable.offset, m_dynamicStringTable.size, ReadOnlyDataSectionSemantics);
+ else if (!m_dynamicStringTable.size)
+ m_logger->LogWarn("Skipping zero-length .dynamic_strtab section at 0x%" PRIx64, m_dynamicStringTable.offset);
}
// Parse and create types for ELF GNU hash table