]> git.saurik.com Git - apple/security.git/blobdiff - libsecurity_utilities/lib/dyldcache.cpp
Security-55471.14.4.tar.gz
[apple/security.git] / libsecurity_utilities / lib / dyldcache.cpp
index e45f4e25eda0cef5dc0fae80b13b2161a0860ab5..267e52d84cbfb09a78aa2ba278b55969c4223eb3 100644 (file)
@@ -43,6 +43,9 @@ const DYLDCache::ArchType DYLDCache::architectures[] = {
        { 0 }
 };
 
+const DYLDCache::ArchType DYLDCache::defaultArchitecture =
+       { 0, 0, "dyld_v1 default", "unknown", littleEndian };
+
 
 //
 // Architecture matching and lookup
@@ -60,6 +63,8 @@ const DYLDCache::ArchType *DYLDCache::matchArchitecture(const dyld_cache_header
        for (const ArchType *arch = architectures; arch->cpu; arch++)
                if (!strcmp(header.magic, arch->magic))
                        return arch;
+       if (!strncmp(header.magic, "dyld_v1 ", 8))
+               return &defaultArchitecture;
        return NULL;
 }
 
@@ -78,8 +83,8 @@ DYLDCache::DYLDCache(const std::string &path)
                UnixError::throwMe(ENOEXEC);
        mFlip = *((const uint8_t *)&mArch->order) != 0x12;
        
-       mSigStart = flip(mHeader->codeSignatureOffset);
-       mSigLength = flip(mHeader->codeSignatureSize);
+       mSigStart = (size_t)flip(mHeader->codeSignatureOffset);
+       mSigLength = (size_t)flip(mHeader->codeSignatureSize);
 }