[llvm] r362526 - [MACHO] Replaced calls to getStruct with getStructOrErr in functions returning Error or Expected or similar
Alex Brachet via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 4 09:55:30 PDT 2019
Author: abrachet
Date: Tue Jun 4 09:55:30 2019
New Revision: 362526
URL: http://llvm.org/viewvc/llvm-project?rev=362526&view=rev
Log:
[MACHO] Replaced calls to getStruct with getStructOrErr in functions returning Error or Expected or similar
Modified:
llvm/trunk/lib/Object/MachOObjectFile.cpp
Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=362526&r1=362525&r2=362526&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Tue Jun 4 09:55:30 2019
@@ -291,7 +291,10 @@ static Error parseSegmentLoadCommand(
for (unsigned J = 0; J < S.nsects; ++J) {
const char *Sec = getSectionPtr(Obj, Load, J);
Sections.push_back(Sec);
- Section s = getStruct<Section>(Obj, Sec);
+ auto SectionOrErr = getStructOrErr<Section>(Obj, Sec);
+ if (!SectionOrErr)
+ return SectionOrErr.takeError();
+ Section s = SectionOrErr.get();
if (Obj.getHeader().filetype != MachO::MH_DYLIB_STUB &&
Obj.getHeader().filetype != MachO::MH_DSYM &&
s.flags != MachO::S_ZEROFILL &&
@@ -401,8 +404,10 @@ static Error checkSymtabCommand(const Ma
" LC_SYMTAB cmdsize too small");
if (*SymtabLoadCmd != nullptr)
return malformedError("more than one LC_SYMTAB command");
- MachO::symtab_command Symtab =
- getStruct<MachO::symtab_command>(Obj, Load.Ptr);
+ auto SymtabOrErr = getStructOrErr<MachO::symtab_command>(Obj, Load.Ptr);
+ if (!SymtabOrErr)
+ return SymtabOrErr.takeError();
+ MachO::symtab_command Symtab = SymtabOrErr.get();
if (Symtab.cmdsize != sizeof(MachO::symtab_command))
return malformedError("LC_SYMTAB command " + Twine(LoadCommandIndex) +
" has incorrect cmdsize");
@@ -457,8 +462,11 @@ static Error checkDysymtabCommand(const
" LC_DYSYMTAB cmdsize too small");
if (*DysymtabLoadCmd != nullptr)
return malformedError("more than one LC_DYSYMTAB command");
- MachO::dysymtab_command Dysymtab =
- getStruct<MachO::dysymtab_command>(Obj, Load.Ptr);
+ auto DysymtabOrErr =
+ getStructOrErr<MachO::dysymtab_command>(Obj, Load.Ptr);
+ if (!DysymtabOrErr)
+ return DysymtabOrErr.takeError();
+ MachO::dysymtab_command Dysymtab = DysymtabOrErr.get();
if (Dysymtab.cmdsize != sizeof(MachO::dysymtab_command))
return malformedError("LC_DYSYMTAB command " + Twine(LoadCommandIndex) +
" has incorrect cmdsize");
@@ -588,8 +596,11 @@ static Error checkLinkeditDataCommand(co
CmdName + " cmdsize too small");
if (*LoadCmd != nullptr)
return malformedError("more than one " + Twine(CmdName) + " command");
- MachO::linkedit_data_command LinkData =
- getStruct<MachO::linkedit_data_command>(Obj, Load.Ptr);
+ auto LinkDataOrError =
+ getStructOrErr<MachO::linkedit_data_command>(Obj, Load.Ptr);
+ if (!LinkDataOrError)
+ return LinkDataOrError.takeError();
+ MachO::linkedit_data_command LinkData = LinkDataOrError.get();
if (LinkData.cmdsize != sizeof(MachO::linkedit_data_command))
return malformedError(Twine(CmdName) + " command " +
Twine(LoadCommandIndex) + " has incorrect cmdsize");
@@ -623,8 +634,11 @@ static Error checkDyldInfoCommand(const
if (*LoadCmd != nullptr)
return malformedError("more than one LC_DYLD_INFO and or LC_DYLD_INFO_ONLY "
"command");
- MachO::dyld_info_command DyldInfo =
- getStruct<MachO::dyld_info_command>(Obj, Load.Ptr);
+ auto DyldInfoOrErr =
+ getStructOrErr<MachO::dyld_info_command>(Obj, Load.Ptr);
+ if (!DyldInfoOrErr)
+ return DyldInfoOrErr.takeError();
+ MachO::dyld_info_command DyldInfo = DyldInfoOrErr.get();
if (DyldInfo.cmdsize != sizeof(MachO::dyld_info_command))
return malformedError(Twine(CmdName) + " command " +
Twine(LoadCommandIndex) + " has incorrect cmdsize");
@@ -714,7 +728,10 @@ static Error checkDylibCommand(const Mac
if (Load.C.cmdsize < sizeof(MachO::dylib_command))
return malformedError("load command " + Twine(LoadCommandIndex) + " " +
CmdName + " cmdsize too small");
- MachO::dylib_command D = getStruct<MachO::dylib_command>(Obj, Load.Ptr);
+ auto CommandOrErr = getStructOrErr<MachO::dylib_command>(Obj, Load.Ptr);
+ if (!CommandOrErr)
+ return CommandOrErr.takeError();
+ MachO::dylib_command D = CommandOrErr.get();
if (D.dylib.name < sizeof(MachO::dylib_command))
return malformedError("load command " + Twine(LoadCommandIndex) + " " +
CmdName + " name.offset field too small, not past "
@@ -760,7 +777,10 @@ static Error checkDyldCommand(const Mach
if (Load.C.cmdsize < sizeof(MachO::dylinker_command))
return malformedError("load command " + Twine(LoadCommandIndex) + " " +
CmdName + " cmdsize too small");
- MachO::dylinker_command D = getStruct<MachO::dylinker_command>(Obj, Load.Ptr);
+ auto CommandOrErr = getStructOrErr<MachO::dylinker_command>(Obj, Load.Ptr);
+ if (!CommandOrErr)
+ return CommandOrErr.takeError();
+ MachO::dylinker_command D = CommandOrErr.get();
if (D.name < sizeof(MachO::dylinker_command))
return malformedError("load command " + Twine(LoadCommandIndex) + " " +
CmdName + " name.offset field too small, not past "
@@ -805,7 +825,10 @@ static Error checkNoteCommand(const Mach
if (Load.C.cmdsize != sizeof(MachO::note_command))
return malformedError("load command " + Twine(LoadCommandIndex) +
" LC_NOTE has incorrect cmdsize");
- MachO::note_command Nt = getStruct<MachO::note_command>(Obj, Load.Ptr);
+ auto NoteCmdOrErr = getStructOrErr<MachO::note_command>(Obj, Load.Ptr);
+ if (!NoteCmdOrErr)
+ return NoteCmdOrErr.takeError();
+ MachO::note_command Nt = NoteCmdOrErr.get();
uint64_t FileSize = Obj.getData().size();
if (Nt.offset > FileSize)
return malformedError("offset field of LC_NOTE command " +
@@ -828,8 +851,11 @@ parseBuildVersionCommand(const MachOObje
const MachOObjectFile::LoadCommandInfo &Load,
SmallVectorImpl<const char*> &BuildTools,
uint32_t LoadCommandIndex) {
- MachO::build_version_command BVC =
- getStruct<MachO::build_version_command>(Obj, Load.Ptr);
+ auto BVCOrErr =
+ getStructOrErr<MachO::build_version_command>(Obj, Load.Ptr);
+ if (!BVCOrErr)
+ return BVCOrErr.takeError();
+ MachO::build_version_command BVC = BVCOrErr.get();
if (Load.C.cmdsize !=
sizeof(MachO::build_version_command) +
BVC.ntools * sizeof(MachO::build_tool_version))
@@ -850,7 +876,10 @@ static Error checkRpathCommand(const Mac
if (Load.C.cmdsize < sizeof(MachO::rpath_command))
return malformedError("load command " + Twine(LoadCommandIndex) +
" LC_RPATH cmdsize too small");
- MachO::rpath_command R = getStruct<MachO::rpath_command>(Obj, Load.Ptr);
+ auto ROrErr = getStructOrErr<MachO::rpath_command>(Obj, Load.Ptr);
+ if (!ROrErr)
+ return ROrErr.takeError();
+ MachO::rpath_command R = ROrErr.get();
if (R.path < sizeof(MachO::rpath_command))
return malformedError("load command " + Twine(LoadCommandIndex) +
" LC_RPATH path.offset field too small, not past "
@@ -903,8 +932,11 @@ static Error checkLinkerOptCommand(const
if (Load.C.cmdsize < sizeof(MachO::linker_option_command))
return malformedError("load command " + Twine(LoadCommandIndex) +
" LC_LINKER_OPTION cmdsize too small");
- MachO::linker_option_command L =
- getStruct<MachO::linker_option_command>(Obj, Load.Ptr);
+ auto LinkOptionOrErr =
+ getStructOrErr<MachO::linker_option_command>(Obj, Load.Ptr);
+ if (!LinkOptionOrErr)
+ return LinkOptionOrErr.takeError();
+ MachO::linker_option_command L = LinkOptionOrErr.get();
// Make sure the count of strings is correct.
const char *string = (const char *)Load.Ptr +
sizeof(struct MachO::linker_option_command);
@@ -968,8 +1000,11 @@ static Error checkThreadCommand(const Ma
if (Load.C.cmdsize < sizeof(MachO::thread_command))
return malformedError("load command " + Twine(LoadCommandIndex) +
CmdName + " cmdsize too small");
- MachO::thread_command T =
- getStruct<MachO::thread_command>(Obj, Load.Ptr);
+ auto ThreadCommandOrErr =
+ getStructOrErr<MachO::thread_command>(Obj, Load.Ptr);
+ if (!ThreadCommandOrErr)
+ return ThreadCommandOrErr.takeError();
+ MachO::thread_command T = ThreadCommandOrErr.get();
const char *state = Load.Ptr + sizeof(MachO::thread_command);
const char *end = Load.Ptr + T.cmdsize;
uint32_t nflavor = 0;
@@ -1160,8 +1195,10 @@ static Error checkTwoLevelHintsCommand(c
" LC_TWOLEVEL_HINTS has incorrect cmdsize");
if (*LoadCmd != nullptr)
return malformedError("more than one LC_TWOLEVEL_HINTS command");
- MachO::twolevel_hints_command Hints =
- getStruct<MachO::twolevel_hints_command>(Obj, Load.Ptr);
+ auto HintsOrErr = getStructOrErr<MachO::twolevel_hints_command>(Obj, Load.Ptr);
+ if(!HintsOrErr)
+ return HintsOrErr.takeError();
+ MachO::twolevel_hints_command Hints = HintsOrErr.get();
uint64_t FileSize = Obj.getData().size();
if (Hints.offset > FileSize)
return malformedError("offset field of LC_TWOLEVEL_HINTS command " +
@@ -2396,8 +2433,11 @@ std::error_code MachOObjectFile::getLibr
// all the Libraries.
if (LibrariesShortNames.size() == 0) {
for (unsigned i = 0; i < Libraries.size(); i++) {
- MachO::dylib_command D =
- getStruct<MachO::dylib_command>(*this, Libraries[i]);
+ auto CommandOrErr =
+ getStructOrErr<MachO::dylib_command>(*this, Libraries[i]);
+ if (!CommandOrErr)
+ return object_error::parse_failed;
+ MachO::dylib_command D = CommandOrErr.get();
if (D.dylib.name >= D.cmdsize)
return object_error::parse_failed;
const char *P = (const char *)(Libraries[i]) + D.dylib.name;
@@ -4491,8 +4531,11 @@ ArrayRef<uint8_t> MachOObjectFile::getDy
if (!DyldInfoLoadCmd)
return None;
- MachO::dyld_info_command DyldInfo =
- getStruct<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ auto DyldInfoOrErr =
+ getStructOrErr<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ if (!DyldInfoOrErr)
+ return None;
+ MachO::dyld_info_command DyldInfo = DyldInfoOrErr.get();
const uint8_t *Ptr =
reinterpret_cast<const uint8_t *>(getPtr(*this, DyldInfo.rebase_off));
return makeArrayRef(Ptr, DyldInfo.rebase_size);
@@ -4502,8 +4545,11 @@ ArrayRef<uint8_t> MachOObjectFile::getDy
if (!DyldInfoLoadCmd)
return None;
- MachO::dyld_info_command DyldInfo =
- getStruct<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ auto DyldInfoOrErr =
+ getStructOrErr<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ if (!DyldInfoOrErr)
+ return None;
+ MachO::dyld_info_command DyldInfo = DyldInfoOrErr.get();
const uint8_t *Ptr =
reinterpret_cast<const uint8_t *>(getPtr(*this, DyldInfo.bind_off));
return makeArrayRef(Ptr, DyldInfo.bind_size);
@@ -4513,8 +4559,11 @@ ArrayRef<uint8_t> MachOObjectFile::getDy
if (!DyldInfoLoadCmd)
return None;
- MachO::dyld_info_command DyldInfo =
- getStruct<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ auto DyldInfoOrErr =
+ getStructOrErr<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ if (!DyldInfoOrErr)
+ return None;
+ MachO::dyld_info_command DyldInfo = DyldInfoOrErr.get();
const uint8_t *Ptr =
reinterpret_cast<const uint8_t *>(getPtr(*this, DyldInfo.weak_bind_off));
return makeArrayRef(Ptr, DyldInfo.weak_bind_size);
@@ -4524,8 +4573,11 @@ ArrayRef<uint8_t> MachOObjectFile::getDy
if (!DyldInfoLoadCmd)
return None;
- MachO::dyld_info_command DyldInfo =
- getStruct<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ auto DyldInfoOrErr =
+ getStructOrErr<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ if (!DyldInfoOrErr)
+ return None;
+ MachO::dyld_info_command DyldInfo = DyldInfoOrErr.get();
const uint8_t *Ptr =
reinterpret_cast<const uint8_t *>(getPtr(*this, DyldInfo.lazy_bind_off));
return makeArrayRef(Ptr, DyldInfo.lazy_bind_size);
@@ -4535,8 +4587,11 @@ ArrayRef<uint8_t> MachOObjectFile::getDy
if (!DyldInfoLoadCmd)
return None;
- MachO::dyld_info_command DyldInfo =
- getStruct<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ auto DyldInfoOrErr =
+ getStructOrErr<MachO::dyld_info_command>(*this, DyldInfoLoadCmd);
+ if (!DyldInfoOrErr)
+ return None;
+ MachO::dyld_info_command DyldInfo = DyldInfoOrErr.get();
const uint8_t *Ptr =
reinterpret_cast<const uint8_t *>(getPtr(*this, DyldInfo.export_off));
return makeArrayRef(Ptr, DyldInfo.export_size);
More information about the llvm-commits
mailing list