From 2b90611892bafea90804a8676a0142568a9df405 Mon Sep 17 00:00:00 2001 From: Nick Kledzik Date: Wed, 17 Sep 2014 00:25:22 +0000 Subject: [PATCH] [llvm-objdump] properly use c_str() with format("%s"). Improve getLibraryShortNameByIndex() error handling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217930 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Object/MachOObjectFile.cpp | 15 +++++---------- test/tools/llvm-objdump/macho-bind.test | 6 +++--- test/tools/llvm-objdump/macho-lazy-bind.test | 6 +++--- tools/llvm-objdump/MachODump.cpp | 4 ++-- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index bb973b41db2..94fa94cfc25 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -1184,27 +1184,22 @@ std::error_code MachOObjectFile::getLibraryShortNameByIndex(unsigned Index, if (Index >= Libraries.size()) return object_error::parse_failed; - MachO::dylib_command D = - getStruct(this, Libraries[Index]); - if (D.dylib.name >= D.cmdsize) - return object_error::parse_failed; - // If the cache of LibrariesShortNames is not built up do that first for // all the Libraries. if (LibrariesShortNames.size() == 0) { for (unsigned i = 0; i < Libraries.size(); i++) { MachO::dylib_command D = getStruct(this, Libraries[i]); - if (D.dylib.name >= D.cmdsize) { - LibrariesShortNames.push_back(StringRef()); - continue; - } + if (D.dylib.name >= D.cmdsize) + return object_error::parse_failed; const char *P = (const char *)(Libraries[i]) + D.dylib.name; StringRef Name = StringRef(P); + if (D.dylib.name+Name.size() >= D.cmdsize) + return object_error::parse_failed; StringRef Suffix; bool isFramework; StringRef shortName = guessLibraryShortName(Name, isFramework, Suffix); - if (shortName == StringRef()) + if (shortName.empty()) LibrariesShortNames.push_back(Name); else LibrariesShortNames.push_back(shortName); diff --git a/test/tools/llvm-objdump/macho-bind.test b/test/tools/llvm-objdump/macho-bind.test index 8865a9e98e5..19944652d78 100644 --- a/test/tools/llvm-objdump/macho-bind.test +++ b/test/tools/llvm-objdump/macho-bind.test @@ -6,6 +6,6 @@ # CHECK:__DATA __data 0x00001028 pointer 0 flat-namespace _any # CHECK:__DATA __data 0x00001020 pointer 0 main-executable _fromApp # CHECK:__DATA __data 0x00001018 pointer 0 this-image _myfunc -# CHECK:__DATA __data 0x00001000 pointer 0 libfoo.dylib _foo -# CHECK:__DATA __data 0x00001008 pointer 0 libbar.dylib _bar -# CHECK:__DATA __data 0x00001010 pointer 0 libSystem.B.dylib _malloc +# CHECK:__DATA __data 0x00001000 pointer 0 libfoo _foo +# CHECK:__DATA __data 0x00001008 pointer 0 libbar _bar +# CHECK:__DATA __data 0x00001010 pointer 0 libSystem _malloc diff --git a/test/tools/llvm-objdump/macho-lazy-bind.test b/test/tools/llvm-objdump/macho-lazy-bind.test index ffb4e5dc4f1..6f9ef222a91 100644 --- a/test/tools/llvm-objdump/macho-lazy-bind.test +++ b/test/tools/llvm-objdump/macho-lazy-bind.test @@ -3,6 +3,6 @@ # RUN: && FileCheck %s < %t || cat %t -# CHECK: __DATA __la_symbol_ptr 0x100001010 libfoo.dylib _foo -# CHECK: __DATA __la_symbol_ptr 0x100001018 libbar.dylib _bar -# CHECK: __DATA __la_symbol_ptr 0x100001020 libSystem.B.dylib _malloc +# CHECK: __DATA __la_symbol_ptr 0x100001010 libfoo _foo +# CHECK: __DATA __la_symbol_ptr 0x100001018 libbar _bar +# CHECK: __DATA __la_symbol_ptr 0x100001020 libSystem _malloc diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index 602e8002800..378eacb256a 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -2482,7 +2482,7 @@ void llvm::printMachOBindTable(const object::MachOObjectFile *Obj) { Address, Entry.typeName().str().c_str(), Entry.addend(), - ordinalName(Obj, Entry.ordinal())) + ordinalName(Obj, Entry.ordinal()).str().c_str()) << Entry.symbolName(); if (Entry.flags() & MachO::BIND_SYMBOL_FLAGS_WEAK_IMPORT) outs() << " (weak_import)\n"; @@ -2514,7 +2514,7 @@ void llvm::printMachOLazyBindTable(const object::MachOObjectFile *Obj) { SegmentName.str().c_str(), SectionName.str().c_str(), Address, - ordinalName(Obj, Entry.ordinal())) + ordinalName(Obj, Entry.ordinal()).str().c_str()) << Entry.symbolName() << "\n"; } } -- 2.34.1