Loading...
--- dyld/dyld-1340/mach_o/Image.cpp
+++ dyld/dyld-1284.13/mach_o/Image.cpp
@@ -187,28 +187,25 @@
if ( Error err = validStructureLinkedit(policy) )
return err;
- uint64_t maxVmOffset = 0x4000;
+ // if image has an exports trie, validate that
+ if ( this->hasExportsTrie() ) {
+ uint64_t max = 0x200000000; // FIXME
+ if ( Error err = this->exportsTrie().valid(max) )
+ return err;
+ }
+
+ // if image has a symbol table, validate that
+ if ( this->hasSymbolTable() ) {
+ uint64_t max = 0x200000000; // FIXME
+ if ( Error err = this->symbolTable().valid(max) )
+ return err;
+ }
+
uint32_t segCount = this->segmentCount();
MappedSegment segs[std::max(segCount,(uint32_t)1)];
- for (uint32_t i=0; i < segCount; ++i) {
+ for (uint32_t i=0; i < segCount; ++i)
segs[i] = this->segment(i);
- if ( segs[i].segName != "__LINKEDIT" ) {
- maxVmOffset = std::max(maxVmOffset, segs[i].runtimeOffset + segs[i].runtimeSize);
- }
- }
std::span<const MappedSegment> segSpan{segs, segCount};
-
- // if image has an exports trie, validate that
- if ( this->hasExportsTrie() ) {
- if ( Error err = this->exportsTrie().valid(header()->preferredLoadAddress(), maxVmOffset) )
- return err;
- }
-
- // if image has a symbol table, validate that
- if ( this->hasSymbolTable() ) {
- if ( Error err = this->symbolTable().valid(maxVmOffset) )
- return err;
- }
// if image has rebase opcodes
if ( this->hasRebaseOpcodes() ) {