From 30e7a0ae041c70f780003885453f27a5ed15e88c Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Wed, 16 Apr 2014 04:15:29 +0000 Subject: tools: fix invalid printing, buffer overrun in llvm-readobj All auxiliary records are consumed when accessing a File record. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206354 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Inputs/file-multiple-aux-records.yaml | 21 +++++++++++++++++++++ .../llvm-readobj/coff-file-sections-reading.test | 18 ++++++++++++++++++ tools/llvm-readobj/COFFDumper.cpp | 1 + 3 files changed, 40 insertions(+) create mode 100644 test/tools/llvm-readobj/Inputs/file-multiple-aux-records.yaml create mode 100644 test/tools/llvm-readobj/coff-file-sections-reading.test diff --git a/test/tools/llvm-readobj/Inputs/file-multiple-aux-records.yaml b/test/tools/llvm-readobj/Inputs/file-multiple-aux-records.yaml new file mode 100644 index 0000000000..8d8f68447d --- /dev/null +++ b/test/tools/llvm-readobj/Inputs/file-multiple-aux-records.yaml @@ -0,0 +1,21 @@ +header: !Header + Machine: IMAGE_FILE_MACHINE_I386 # (0x14c) + Characteristics: [ IMAGE_FILE_DEBUG_STRIPPED ] +sections: +symbols: + - !Symbol + Name: .file + Value: 0 + SectionNumber: 65534 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_FILE + File: first-section-has-eighteen-characters.asm + - !Symbol + Name: '@comp.id' + Value: 13485607 + SectionNumber: 65535 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + diff --git a/test/tools/llvm-readobj/coff-file-sections-reading.test b/test/tools/llvm-readobj/coff-file-sections-reading.test new file mode 100644 index 0000000000..5c44c16f00 --- /dev/null +++ b/test/tools/llvm-readobj/coff-file-sections-reading.test @@ -0,0 +1,18 @@ +RUN: yaml2obj %p/Inputs/file-multiple-aux-records.yaml | llvm-readobj -t - | FileCheck %s + +CHECK: Symbols [ +CHECK: Symbol { +CHECK: Name: .file +CHECK: Value: 0 +CHECK: Section: (65534) +CHECK: BaseType: Null (0x0) +CHECK: ComplexType: Null (0x0) +CHECK: StorageClass: File (0x67) +CHECK: AuxSymbolCount: 3 +CHECK: AuxFileRecord { +CHECK: FileName: first-section-has-eighteen-characters.asm +CHECK: } +CHECK-NOT: AuxFileRecord { +CHECK: } +CHECK: ] + diff --git a/tools/llvm-readobj/COFFDumper.cpp b/tools/llvm-readobj/COFFDumper.cpp index 8d08d021a3..48edf78a3d 100644 --- a/tools/llvm-readobj/COFFDumper.cpp +++ b/tools/llvm-readobj/COFFDumper.cpp @@ -981,6 +981,7 @@ void COFFDumper::printSymbol(const SymbolRef &Sym) { StringRef Name(Aux->FileName, Symbol->NumberOfAuxSymbols * COFF::SymbolSize); W.printString("FileName", Name.rtrim(StringRef("\0", 1))); + break; } else if (Symbol->isSectionDefinition()) { const coff_aux_section_definition *Aux; if (error(getSymbolAuxData(Obj, Symbol + I, Aux))) -- cgit v1.2.3